




/ SSB 基准测试

/ 步骤一:官网注册并开通 ByteHouse

/ 步骤二:创建计算组
数据库表管理:用于创建和管理数据库、数据表以及视图等数据对象
数据加载:用于从不同的离线和实时数据源如对象存储、Kafka 等地写入数据
SQL 工作表:在界面上编辑、管理并运行 SQL 查询
计算组:创建和管理虚拟的计算资源,用于执行数据查询等操作
查询历史:用于查看 SQL 的历史执行记录、状态和查询详情等


步骤三:创建数据库表

CREATE TABLE ssb_100.customer(C_CUSTKEY UInt32,C_NAME String,C_ADDRESS String,C_CITY LowCardinality(String),C_NATION LowCardinality(String),C_REGION LowCardinality(String),C_PHONE String,C_MKTSEGMENT LowCardinality(String),C_PLACEHOLDER Nullable(String))ENGINE = CnchMergeTree ORDER BY (C_CUSTKEY);CREATE TABLE ssb_100.lineorder(LO_ORDERKEY UInt32,LO_LINENUMBER UInt8,LO_CUSTKEY UInt32,LO_PARTKEY UInt32,LO_SUPPKEY UInt32,LO_ORDERDATE Date,LO_ORDERPRIORITY LowCardinality(String),LO_SHIPPRIORITY UInt8,LO_QUANTITY UInt8,LO_EXTENDEDPRICE UInt32,LO_ORDTOTALPRICE UInt32,LO_DISCOUNT UInt8,LO_REVENUE UInt32,LO_SUPPLYCOST UInt32,LO_TAX UInt8,LO_COMMITDATE Date,LO_SHIPMODE LowCardinality(String),LO_PLACEHOLDER Nullable(String))ENGINE = CnchMergeTree PARTITION BY toYear(LO_ORDERDATE) ORDER BY (LO_ORDERDATE, LO_ORDERKEY);CREATE TABLE ssb_100.part(P_PARTKEY UInt32,P_NAME String,P_MFGR LowCardinality(String),P_CATEGORY LowCardinality(String),P_BRAND LowCardinality(String),P_COLOR LowCardinality(String),P_TYPE LowCardinality(String),P_SIZE UInt8,P_CONTAINER LowCardinality(String),P_PLACEHOLDER Nullable(String))ENGINE = CnchMergeTree ORDER BY P_PARTKEY;CREATE TABLE ssb_100.supplier(S_SUPPKEY UInt32,S_NAME String,S_ADDRESS String,S_CITY LowCardinality(String),S_NATION LowCardinality(String),S_REGION LowCardinality(String),S_PHONE String,S_PLACEHOLDER Nullable(String))ENGINE = CnchMergeTree ORDER BY S_SUPPKEY;CREATE TABLE ssb_100.dwdate(D_DATEKEY UInt32,D_DATE String,D_DAYOFWEEK String, -- defined in Section 2.6 as Size 8, but Wednesday is 9 lettersD_MONTH String,D_YEAR UInt32,D_YEARMONTHNUM UInt32,D_YEARMONTH String,D_DAYNUMINWEEK UInt32,D_DAYNUMINMONTH UInt32,D_DAYNUMINYEAR UInt32,D_MONTHNUMINYEAR UInt32,D_WEEKNUMINYEAR UInt32,D_SELLINGSEASON String,D_LASTDAYINWEEKFL UInt32,D_LASTDAYINMONTHFL UInt32,D_HOLIDAYFL UInt32,D_WEEKDAYFL UInt32,S_PLACEHOLDER Nullable(String))ENGINE=CnchMergeTree() ORDER BY (D_DATEKEY);

/ 步骤四:从对象存储中导入 SSB 数据







步骤五:数据处理及分析
1. 原始查询测试
-- pre-warmselect * from ssb_100.customer order by C_CUSTKEY desc limit 100;select * from ssb_100.dwdate order by D_DATEKEY desc limit 100;select * from ssb_100.lineorder order by LO_ORDERKEY desc limit 100;select * from ssb_100.part order by P_PARTKEY desc limit 100;select * from ssb_100.supplier order by S_SUPPKEY desc limit 100;select * from ssb_100.lineorder_flat order by LO_ORDERKEY desc limit 100;-- Q1.1select sum(LO_EXTENDEDPRICE*LO_DISCOUNT) as revenuefrom ssb_100.lineorderwhere toYear(LO_ORDERDATE) = 1993and LO_DISCOUNT between 1 and 3and LO_QUANTITY < 25;-- Q1.2select sum(LO_EXTENDEDPRICE*LO_DISCOUNT) as revenuefrom ssb_100.lineorderwhere toYYYYMM(LO_ORDERDATE) = 199401and LO_DISCOUNT between 4 and 6and LO_QUANTITY between 26 and 35;-- Q1.3select sum(LO_EXTENDEDPRICE*LO_DISCOUNT) as revenuefrom ssb_100.lineorderwhere toISOWeek(LO_ORDERDATE) = 6and toYear(LO_ORDERDATE)= 1994and LO_DISCOUNT between 5 and 7and LO_QUANTITY between 26 and 35;-- Q2.1select sum(LO_REVENUE), toYear(LO_ORDERDATE) AS d_year, P_BRANDfrom ssb_100.lineorder, ssb_100.part, ssb_100.supplierwhere LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEYand P_CATEGORY = 'MFGR#53' and S_REGION = 'AMERICA'GROUP BY d_year, P_BRAND;-- Q2.2SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRANDFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplierWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEYand P_BRAND >= 'MFGR#2221' and P_BRAND <= 'MFGR#2228' and S_REGION = 'ASIA'GROUP BY year, P_BRANDORDER BY year, P_BRAND;-- Q2.3SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRANDFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplierWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEYand P_BRAND = 'MFGR#2239'and S_REGION = 'EUROPE'GROUP BY year, P_BRANDORDER BY year, P_BRAND;-- Q3.1SELECT C_NATION, S_NATION, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customerWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEY and LO_CUSTKEY = C_CUSTKEYand C_REGION = 'ASIA' AND S_REGION = 'ASIA' AND year >= 1992 AND year <= 1997GROUP BY C_NATION, S_NATION, yearORDER BY year ASC, revenue DESC;-- Q3.2SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customerWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEY and LO_CUSTKEY = C_CUSTKEYand C_NATION = 'UNITED STATES' AND S_NATION = 'UNITED STATES' AND year >= 1992 AND year <= 1997GROUP BY C_CITY, S_CITY, yearORDER BY year ASC, revenue DESC;-- Q3.3SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customerWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEY and LO_CUSTKEY = C_CUSTKEYand (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997GROUP BY C_CITY, S_CITY, yearORDER BY year ASC, revenue DESC;-- Q3.4SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customerWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEY and LO_CUSTKEY = C_CUSTKEYand (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND toYYYYMM(LO_ORDERDATE) = 199712GROUP BY C_CITY, S_CITY, yearORDER BY year ASC, revenue DESC;-- Q4.1SELECT toYear(LO_ORDERDATE) AS year, C_NATION, sum(LO_REVENUE - LO_SUPPLYCOST) AS profitFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customerWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEY and LO_CUSTKEY = C_CUSTKEYand C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')GROUP BY year, C_NATIONORDER BY year ASC, C_NATION ASC;-- Q4.2SELECT toYear(LO_ORDERDATE) AS year, S_NATION, P_CATEGORY, sum(LO_REVENUE - LO_SUPPLYCOST) AS profitFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customerWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEY and LO_CUSTKEY = C_CUSTKEYand C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (year = 1997 OR year = 1998) AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')GROUP BY year, S_NATION, P_CATEGORYORDER BY year ASC, S_NATION ASC, P_CATEGORY ASC;-- Q4.3SELECT toYear(LO_ORDERDATE) AS year, S_CITY, P_BRAND, sum(LO_REVENUE - LO_SUPPLYCOST) AS profitFROM ssb_100.lineorder, ssb_100.part, ssb_100.supplierWHERE LO_PARTKEY = P_PARTKEY and LO_SUPPKEY = S_SUPPKEYand S_NATION = 'UNITED STATES' AND (year = 1997 OR year = 1998) AND P_CATEGORY = 'MFGR#14'GROUP BY year, S_CITY, P_BRANDORDER BY year ASC, S_CITY ASC, P_BRAND ASC;
2. 打平表测试
注:为了确保打平表的执行,需要配置参数 SET max_memory_usage = 20000000000; 此外需要在 ByteHouse 控制台中配置查询超时为 3600s (我的账户 > 查询配置 > 查询超时),避免执行超时导致的失败。
SET max_memory_usage = 20000000000;SET send_timeout = 3600;SET receive_timeout = 3600;CREATE TABLE IF NOT EXISTS ssb_100.lineorder_flatengine = CnchMergeTreepartition by toYear(LO_ORDERDATE)order by (LO_ORDERDATE, LO_ORDERKEY) asselectL.LO_ORDERKEY as LO_ORDERKEY,L.LO_LINENUMBER as LO_LINENUMBER,L.LO_CUSTKEY as LO_CUSTKEY,L.LO_PARTKEY as LO_PARTKEY,L.LO_SUPPKEY as LO_SUPPKEY,L.LO_ORDERDATE as LO_ORDERDATE,L.LO_ORDERPRIORITY as LO_ORDERPRIORITY,L.LO_SHIPPRIORITY as LO_SHIPPRIORITY,L.LO_QUANTITY as LO_QUANTITY,L.LO_EXTENDEDPRICE as LO_EXTENDEDPRICE,L.LO_ORDTOTALPRICE as LO_ORDTOTALPRICE,L.LO_DISCOUNT as LO_DISCOUNT,L.LO_REVENUE as LO_REVENUE,L.LO_SUPPLYCOST as LO_SUPPLYCOST,L.LO_TAX as LO_TAX,L.LO_COMMITDATE as LO_COMMITDATE,L.LO_SHIPMODE as LO_SHIPMODE,C.C_NAME as C_NAME,C.C_ADDRESS as C_ADDRESS,C.C_CITY as C_CITY,C.C_NATION as C_NATION,C.C_REGION as C_REGION,C.C_PHONE as C_PHONE,C.C_MKTSEGMENT as C_MKTSEGMENT,S.S_NAME as S_NAME,S.S_ADDRESS as S_ADDRESS,S.S_CITY as S_CITY,S.S_NATION as S_NATION,S.S_REGION as S_REGION,S.S_PHONE as S_PHONE,P.P_NAME as P_NAME,P.P_MFGR as P_MFGR,P.P_CATEGORY as P_CATEGORY,P.P_BRAND as P_BRAND,P.P_COLOR as P_COLOR,P.P_TYPE as P_TYPE,P.P_SIZE as P_SIZE,P.P_CONTAINER as P_CONTAINERfrom ssb_100.lineorder as Linner join ssb_100.customer as C on C.C_CUSTKEY = L.LO_CUSTKEYinner join ssb_100.supplier as S on S.S_SUPPKEY = L.LO_SUPPKEYinner join ssb_100.part as P on P.P_PARTKEY = L.LO_PARTKEY;
-- F1.1SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenueFROM ssb_100.lineorder_flatWHERE toYear(LO_ORDERDATE) = 1993AND LO_DISCOUNT BETWEEN 1 AND 3AND LO_QUANTITY < 25;-- F1.2SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenueFROM ssb_100.lineorder_flatWHERE toYYYYMM(LO_ORDERDATE) = 199401AND LO_DISCOUNT BETWEEN 4 AND 6AND LO_QUANTITY BETWEEN 26 AND 35;-- F1.3SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenueFROM ssb_100.lineorder_flatWHERE toISOWeek(LO_ORDERDATE) = 6AND toYear(LO_ORDERDATE) = 1994AND LO_DISCOUNT BETWEEN 5 AND 7AND LO_QUANTITY BETWEEN 26 AND 35;-- F2.1SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRANDFROM ssb_100.lineorder_flatWHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'GROUP BY year, P_BRANDORDER BY year, P_BRAND;-- F2.2SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRANDFROM ssb_100.lineorder_flatWHERE P_BRAND >= 'MFGR#2221' AND P_BRAND <= 'MFGR#2228' AND S_REGION = 'ASIA'GROUP BY year, P_BRANDORDER BY year, P_BRAND;-- F2.3SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRANDFROM ssb_100.lineorder_flatWHERE P_BRAND = 'MFGR#2239' AND S_REGION = 'EUROPE'GROUP BY year, P_BRANDORDER BY year, P_BRAND;-- F3.1SELECT C_NATION, S_NATION, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder_flatWHERE C_REGION = 'ASIA' AND S_REGION = 'ASIA' AND year >= 1992 AND year <= 1997GROUP BY C_NATION, S_NATION, yearORDER BY year ASC, revenue DESC;-- F3.2SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder_flatWHERE C_NATION = 'UNITED STATES' AND S_NATION = 'UNITED STATES' AND year >= 1992 AND year <= 1997GROUP BY C_CITY, S_CITY, yearORDER BY year ASC, revenue DESC;-- F3.3SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder_flatWHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997GROUP BY C_CITY, S_CITY, yearORDER BY year ASC, revenue DESC;-- F3.4SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenueFROM ssb_100.lineorder_flatWHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND toYYYYMM(LO_ORDERDATE) = 199712GROUP BY C_CITY, S_CITY, yearORDER BY year ASC, revenue DESC;-- F4.1SELECT toYear(LO_ORDERDATE) AS year, C_NATION, sum(LO_REVENUE - LO_SUPPLYCOST) AS profitFROM ssb_100.lineorder_flatWHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')GROUP BY year, C_NATIONORDER BY year ASC, C_NATION ASC;-- F4.2SELECT toYear(LO_ORDERDATE) AS year, S_NATION, P_CATEGORY, sum(LO_REVENUE - LO_SUPPLYCOST) AS profitFROM ssb_100.lineorder_flatWHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (year = 1997 OR year = 1998) AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')GROUP BY year, S_NATION, P_CATEGORYORDER BY year ASC, S_NATION ASC, P_CATEGORY ASC;-- F4.3SELECT toYear(LO_ORDERDATE) AS year, S_CITY, P_BRAND, sum(LO_REVENUE - LO_SUPPLYCOST) AS profitFROM ssb_100.lineorder_flatWHERE S_NATION = 'UNITED STATES' AND (year = 1997 OR year = 1998) AND P_CATEGORY = 'MFGR#14'GROUP BY year, S_CITY, P_BRANDORDER BY year ASC, S_CITY ASC, P_BRAND ASC;

注:查询结果因配置参数和资源配置的不同,耗时也有差异,欢迎联系 ByteHouse 进行查询优化。


/ ByteHouse大促进行中 /

产品介绍





文章转载自字节跳动数据平台,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




