From eb6c1a139298c855eb8ea189cfd4093443a19eb3 Mon Sep 17 00:00:00 2001 From: LING ZHANG Date: Mon, 20 May 2024 14:54:19 -0500 Subject: [PATCH 1/2] Create dialect-sqlserver.xml --- .../chbenchmark/dialect-sqlserver.xml | 231 ++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 src/main/resources/benchmarks/chbenchmark/dialect-sqlserver.xml diff --git a/src/main/resources/benchmarks/chbenchmark/dialect-sqlserver.xml b/src/main/resources/benchmarks/chbenchmark/dialect-sqlserver.xml new file mode 100644 index 000000000..71d31cac5 --- /dev/null +++ b/src/main/resources/benchmarks/chbenchmark/dialect-sqlserver.xml @@ -0,0 +1,231 @@ + + + + + + SELECT ol_number, sum(ol_quantity) AS sum_qty, sum(ol_amount) AS sum_amount, avg(ol_quantity) AS avg_qty, + avg(ol_amount) AS avg_amount, count(*) AS count_order + FROM order_line + WHERE ol_delivery_d > cast('2007-01-02 00:00:00.000' AS datetime) + GROUP BY ol_number + ORDER BY ol_number + + + + + SELECT su_suppkey, su_name, n_name, i_id, i_name, su_address, su_phone, su_comment + FROM item, supplier, stock, nation, region, ( + SELECT s_i_id AS m_i_id, MIN(s_quantity) AS m_s_quantity + FROM stock, supplier, nation, region + WHERE ((s_w_id*s_i_id) % 10000) = su_suppkey AND su_nationkey=n_nationkey + AND n_regionkey=r_regionkey AND r_name LIKE 'Europ%' + GROUP BY s_i_id) m + WHERE i_id = s_i_id AND ((s_w_id * s_i_id) % 10000) = su_suppkey AND su_nationkey = n_nationkey + AND n_regionkey = r_regionkey AND i_data LIKE '%b' AND r_name LIKE 'Europ%' AND i_id=m_i_id + AND s_quantity = m_s_quantity + ORDER BY n_name, su_name, i_id + + + + + SELECT ol_o_id, ol_w_id, ol_d_id, sum(ol_amount) AS revenue, o_entry_d + FROM customer, new_order, oorder, order_line + WHERE c_state LIKE 'A%' AND c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id AND no_w_id = o_w_id + AND no_d_id = o_d_id AND no_o_id = o_id AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id + AND o_entry_d > cast('2007-01-02 00:00:00.000' AS datetime) + GROUP BY ol_o_id, ol_w_id, ol_d_id, o_entry_d + ORDER BY revenue DESC , o_entry_d + + + + + SELECT n_name, sum(ol_amount) AS revenue + FROM customer, oorder, order_line, stock, supplier, nation, region + WHERE c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id AND ol_o_id = o_id AND ol_w_id = o_w_id + AND ol_d_id=o_d_id AND ol_w_id = s_w_id AND ol_i_id = s_i_id + AND ((s_w_id * s_i_id) % 10000) = su_suppkey + AND ascii(substring(c_state, 1, 1)) = su_nationkey AND su_nationkey = n_nationkey + AND n_regionkey = r_regionkey AND r_name = 'Europe' + AND o_entry_d >= cast('2007-01-02 00:00:00.000' AS datetime) + GROUP BY n_name + ORDER BY revenue DESC + + + + + SELECT sum(ol_amount) AS revenue + FROM order_line + WHERE ol_delivery_d >= cast('1999-01-01 00:00:00.000' AS datetime) + AND ol_delivery_d < cast('2020-01-01 00:00:00.000' AS datetime) + AND ol_quantity BETWEEN 1 AND 100000 + + + + + SELECT su_nationkey AS supp_nation, substring(c_state, 1, 1) AS cust_nation, + YEAR(o_entry_d) AS l_year, sum(ol_amount) AS revenue + FROM supplier, stock, order_line, oorder, customer, nation n1, nation n2 + WHERE ol_supply_w_id = s_w_id AND ol_i_id = s_i_id AND ((s_w_id * s_i_id) % 10000) = su_suppkey + AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id AND c_id = o_c_id + AND c_w_id = o_w_id AND c_d_id = o_d_id AND su_nationkey = n1.n_nationkey + AND ascii(substring(c_state, 1, 1)) = n2.n_nationkey AND ( + (n1.n_name = 'Germany' AND n2.n_name = 'Cambodia') + OR + (n1.n_name = 'Cambodia' AND n2.n_name = 'Germany') + ) + GROUP BY su_nationkey, substring(c_state, 1, 1), YEAR(o_entry_d) + ORDER BY su_nationkey, cust_nation, l_year + + + + + SELECT YEAR(o_entry_d) AS l_year, sum( + CASE WHEN n2.n_name = 'Germany' THEN ol_amount ELSE 0 END + ) / sum(ol_amount) AS mkt_share + FROM item, supplier, stock, order_line, oorder, customer, nation n1, nation n2, region + WHERE i_id = s_i_id AND ol_i_id = s_i_id AND ol_supply_w_id = s_w_id + AND ((s_w_id * s_i_id) % 10000) = su_suppkey AND ol_w_id = o_w_id AND ol_d_id = o_d_id + AND ol_o_id = o_id AND c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id + AND n1.n_nationkey = ascii(substring(c_state, 1, 1)) AND n1.n_regionkey = r_regionkey + AND ol_i_id < 1000 AND r_name = 'Europe' AND su_nationkey = n2.n_nationkey + AND i_data LIKE '%b' AND i_id = ol_i_id + GROUP BY YEAR(o_entry_d) + ORDER BY l_year + + + + + SELECT n_name, YEAR(o_entry_d) AS l_year, sum(ol_amount) AS sum_profit + FROM item, stock, supplier, order_line, oorder, nation + WHERE ol_i_id = s_i_id AND ol_supply_w_id = s_w_id AND ((s_w_id * s_i_id) % 10000) = su_suppkey + AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id AND ol_i_id = i_id + AND su_nationkey = n_nationkey AND i_data LIKE '%bb' + GROUP BY n_name, YEAR(o_entry_d) + ORDER BY n_name, l_year DESC + + + + + SELECT c_id, c_last, sum(ol_amount) AS revenue, c_city, c_phone, n_name + FROM customer, oorder, order_line, nation + WHERE c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id AND ol_w_id = o_w_id AND ol_d_id = o_d_id + AND ol_o_id = o_id AND o_entry_d >= cast('2007-01-02 00:00:00.000' AS datetime) + AND o_entry_d <= ol_delivery_d AND n_nationkey = ascii(substring(c_state, 1, 1)) + GROUP BY c_id, c_last, c_city, c_phone, n_name + ORDER BY revenue DESC + + + + + SELECT s_i_id, sum(s_order_cnt) AS ordercount + FROM stock, supplier, nation + WHERE ((s_w_id * s_i_id) % 10000) = su_suppkey AND su_nationkey = n_nationkey AND n_name = 'Germany' + GROUP BY s_i_id + HAVING sum(s_order_cnt) > ( + SELECT sum(s_order_cnt) * .005 + FROM stock, supplier, nation + WHERE ((s_w_id * s_i_id) % 10000) = su_suppkey AND su_nationkey = n_nationkey AND n_name = 'Germany' + ) ORDER BY ordercount DESC + + + + + SELECT o_ol_cnt, sum( + CASE WHEN o_carrier_id = 1 OR o_carrier_id = 2 THEN 1 ELSE 0 END + ) AS high_line_count, sum( + CASE WHEN o_carrier_id <> 1 AND o_carrier_id <> 2 THEN 1 ELSE 0 END + ) AS low_line_count + FROM oorder, order_line + WHERE ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id AND o_entry_d <= ol_delivery_d + AND ol_delivery_d < cast('2020-01-01 00:00:00.000' AS datetime) + GROUP BY o_ol_cnt + ORDER BY o_ol_cnt + + + + + SELECT c_count, count(*) AS custdist + FROM ( + SELECT c_id, count(o_id) AS c_count + FROM customer LEFT OUTER JOIN oorder + ON (c_w_id = o_w_id AND c_d_id = o_d_id AND c_id = o_c_id AND o_carrier_id > 8) + GROUP BY c_id + ) AS c_orders + GROUP BY c_count + ORDER BY custdist DESC, c_count DESC + + + + + SELECT (100.00 * sum( + CASE WHEN i_data LIKE 'PR%' THEN ol_amount ELSE 0 END + ) / (1 + sum(ol_amount))) AS promo_revenue + FROM order_line, item + WHERE ol_i_id = i_id AND ol_delivery_d >= cast('2007-01-02 00:00:00.000' AS datetime) + AND ol_delivery_d < cast('2020-01-02 00:00:00.000' AS datetime) + + + + + CREATE view revenue0 (supplier_no, total_revenue) AS + SELECT ((s_w_id * s_i_id) % 10000) AS supplier_no, sum(ol_amount) AS total_revenue + FROM order_line, stock + WHERE ol_i_id = s_i_id AND ol_supply_w_id = s_w_id + AND ol_delivery_d >= cast('2007-01-02 00:00:00.000' AS datetime) + GROUP BY ((s_w_id * s_i_id) % 10000) + + + + + SELECT i_name, substring(i_data, 1, 3) AS brand, i_price, count(DISTINCT ((s_w_id * s_i_id) % 10000)) AS supplier_cnt + FROM stock, item + WHERE i_id = s_i_id AND i_data NOT LIKE 'zz%' AND (((s_w_id * s_i_id)%10000) NOT IN ( + SELECT su_suppkey FROM supplier WHERE su_comment LIKE '%bad%') + ) + GROUP BY i_name, substring(i_data, 1, 3), i_price + ORDER BY supplier_cnt DESC + + + + + SELECT su_name, su_address + FROM supplier, nation + WHERE su_suppkey IN ( + SELECT ((s_i_id * s_w_id) % 10000) + FROM stock INNER JOIN item ON i_id = s_i_id INNER JOIN order_line ON ol_i_id = s_i_id + WHERE ol_delivery_d > cast('2010-05-23 12:00:00' AS datetime) AND i_data LIKE 'co%' + GROUP BY s_i_id, s_w_id, s_quantity + HAVING 2*s_quantity > sum(ol_quantity) + ) AND su_nationkey = n_nationkey AND n_name = 'Germany' + ORDER BY su_name + + + + + SELECT su_name, count(*) AS numwait + FROM supplier, order_line l1, oorder, stock, nation + WHERE ol_o_id = o_id AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_w_id = s_w_id AND ol_i_id = s_i_id + AND ((s_w_id * s_i_id) % 10000) = su_suppkey AND l1.ol_delivery_d > o_entry_d AND NOT EXISTS ( + SELECT * FROM order_line l2 + WHERE l2.ol_o_id = l1.ol_o_id AND l2.ol_w_id = l1.ol_w_id AND l2.ol_d_id = l1.ol_d_id + AND l2.ol_delivery_d > l1.ol_delivery_d + ) AND su_nationkey = n_nationkey AND n_name = 'Germany' + GROUP BY su_name + ORDER BY numwait DESC, su_name + + + + + SELECT substring(c_state, 1, 1) AS country, count(*) AS numcust, sum(c_balance) AS totacctbal + FROM customer + WHERE substring(c_phone, 1, 1) IN ('1', '2', '3', '4', '5', '6', '7') AND c_balance > ( + SELECT avg(c_balance) FROM customer + WHERE c_balance > 0.00 AND substring(c_phone, 1, 1) IN ('1', '2', '3', '4', '5', '6', '7') + ) AND NOT EXISTS ( + SELECT * FROM oorder WHERE o_c_id = c_id AND o_w_id = c_w_id AND o_d_id = c_d_id + ) GROUP BY substring(c_state, 1, 1) + ORDER BY country + + + + \ No newline at end of file From d57bc3d90648e1f19f4a37176fff193bab671b1a Mon Sep 17 00:00:00 2001 From: Brian Kroth Date: Mon, 3 Jun 2024 15:45:18 -0500 Subject: [PATCH 2/2] enable chbenchmark tests for sqlserver --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index f3911d957..a7020de18 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -604,7 +604,7 @@ jobs: fail-fast: false matrix: # TODO: add auctionmark and seats benchmark - benchmark: [ 'epinions', 'hyadapt', 'noop', 'otmetrics', 'resourcestresser', 'sibench', 'smallbank', 'tatp', 'templated', 'tpcc', 'tpcc-with-reconnects', 'tpch', 'twitter', 'voter', 'wikipedia', 'ycsb' ] + benchmark: [ 'chbenchmark', 'epinions', 'hyadapt', 'noop', 'otmetrics', 'resourcestresser', 'sibench', 'smallbank', 'tatp', 'templated', 'tpcc', 'tpcc-with-reconnects', 'tpch', 'twitter', 'voter', 'wikipedia', 'ycsb' ] services: sqlserver: image: mcr.microsoft.com/mssql/server:latest