以 100GB SSB 性能测试为例,通过 ByteHouse 云数仓开启你的数据分析之路
作者:ByteHouse 团队 2023-04-22 09:40:36
云计算
云原生 ByteHouse 作为云原生的数据平台,从架构层面入手,通过存储和计算分离的云原生架构完美适配云上基础设施。ByteHouse 作为云原生的数据平台,从架构层面入手,通过存储和计算分离的云原生架构完美适配云上基础设施。
I. 传统数仓的演进:云数仓
近年来,随着数据“爆炸式”的增长,越来越多的数据被产生、收集和存储。而挖掘海量数据中的真实价值,从其中提取商机并洞见未来,则成了现代企业和组织不可忽视的命题。
随着数据量级和复杂度的增大,数据分析处理的技术架构也在不断演进。在面对海量数据分析时,传统 OLAP 技术架构中的痛点变得越来越明显,如扩容缩容耗时长,导致资源利用率偏低,成本居高不下;以及运维配置复杂,需要专业的技术人员介入等。
为了解决这类问题,云数仓的概念应运而生。和传统数仓架构不同的是,云原生数仓借助于云平台的基础资源,实现了资源的动态扩缩容,并最大化利用资源,从而达到 Pay as you go 按实际用量付费的模式。
ByteHouse 作为云原生的数据平台,从架构层面入手,通过存储和计算分离的云原生架构完美适配云上基础设施。在字节跳动内部,ByteHouse 已经支持 80% 的分析应用场景,包括用户增长业务、广告、A/B 测试等。除了极致的分析性能之外,ByteHouse 开箱即用,按实际使用付费的特性也极大地降低了企业和个人的上手门槛,能够在短短数分钟内体验到数据分析的魅力。Talk is cheap, 接下来就让我们通过一个实战案例来体验下 ByteHouse 云数仓的强大功能。
II. 快速上手 ByteHouse —— 轻量级云数仓
本章节通过使用 ByteHouse 云数仓进行 SSB 基准测试,在带领读者了解产品性能的同时,也一并熟悉产品中各个模块的功能,开启你的数据分析之路,通过分析海量数据,加速数据洞察。ByteHouse 的架构总览如下。
SSB 基准测试
SSB(Star Schema Benchmark)是由麻省州立大学波士顿校区的研究员定义的基于现实商业应用的数据模型。SSB 是在 TPC-H 标准的基础上改进而成,主要将 TPC-H 中的雪花模型改成了更为通用的的星型模型,将基准查询从复杂的 Ad-hoc 查询改成了结构更加固定的 OLAP 查询,从而主要用于模拟测试 OLAP 引擎和轻量数仓场景下的查询性能。由于 SSB 基准测试较为中立,并贴近现实的商业场景,因此在学界及工业界有广泛的应用。
SSB 基准测试中对应的表结构如下所示,可以看到 SSB 主要采用星型模型,其中包含了 1 个事实表 lineorder 和 4 个维度表 customer, part, dwdate 以及 supplier,每张维度表通过 Primary Key 和事实表进行关联。测试通过执行 13 条 SQL 进行查询,包含了多表关联,group by,复杂条件等多种组合。更多详细信息请参考 SSB 文献 (https://www.cs.umb.edu/~poneil/StarSchemaB.pdf)。
步骤一:官网注册并开通 ByteHouse
访问ByteHouse 云数仓火山引擎官网,注册火山引擎账户,完成实名认证后,即可登录到产品控制台。开通产品进行测试,目前 ByteHouse 支持包年包月和按量付费两种模式的实例,便于您根据业务需求进行选择。
ByteHouse 云数仓火山引擎官网
https://www.volcengine.com/product/bytehouse-cloud
产品控制台
https://console.volcengine.com/bytehouse
步骤二:创建计算组
登录到控制台后,可以看到数据库表管理、数据加载、SQL 工作表、计算组、查询历史和角色管理等几大模块。分别具有如下作用:
数据库表管理:用于创建和管理数据库、数据表以及视图等数据对象 数据加载:用于从不同的离线和实时数据源如对象存储、Kafka 等地写入数据 SQL 工作表:在界面上编辑、管理并运行 SQL 查询 计算组:创建和管理虚拟的计算资源,用于执行数据查询等操作 查询历史:用于查看 SQL 的历史执行记录、状态和查询详情等
为了方便进行后续的建库建表和查询等操作,首先在 ByteHouse 控制台创建型号为 L 的计算组,如下图所示
计算组是 Bytehouse 中的计算资源集群,可按需进行横向扩展。计算组提供所需的资源如 CPU、内存及临时存储等,用于执行数据查询 DQL、DML 等操作。ByteHouse 计算组能够实现弹性扩缩容,读写分离、存算分离等,并且能对资源进行细粒度的权限控制。
步骤三:创建数据库表
在控制台页面中创建名为 ssb_“100 的数据库
创建完毕后,进入到 SQL 工作表模块,通过如下建表语句建立四个数据表(事实表),并保存对应的 SQL 语句。
CREATETABLEssb_100.customer
(
C_CUSTKEYUInt32,
C_NAMEString,
C_ADDRESSString,
C_CITYLowCardinality(String),
C_NATIONLowCardinality(String),
C_REGIONLowCardinality(String),
C_PHONEString,
C_MKTSEGMENTLowCardinality(String),
C_PLACEHOLDERNullable(String)
)
ENGINE=CnchMergeTreeORDERBY (C_CUSTKEY);
CREATETABLEssb_100.lineorder
(
LO_ORDERKEYUInt32,
LO_LINENUMBERUInt8,
LO_CUSTKEYUInt32,
LO_PARTKEYUInt32,
LO_SUPPKEYUInt32,
LO_ORDERDATEDate,
LO_ORDERPRIORITYLowCardinality(String),
LO_SHIPPRIORITYUInt8,
LO_QUANTITYUInt8,
LO_EXTENDEDPRICEUInt32,
LO_ORDTOTALPRICEUInt32,
LO_DISCOUNTUInt8,
LO_REVENUEUInt32,
LO_SUPPLYCOSTUInt32,
LO_TAXUInt8,
LO_COMMITDATEDate,
LO_SHIPMODELowCardinality(String),
LO_PLACEHOLDERNullable(String)
)
ENGINE=CnchMergeTreePARTITIONBYtoYear(LO_ORDERDATE) ORDERBY (LO_ORDERDATE, LO_ORDERKEY);
CREATETABLEssb_100.part
(
P_PARTKEYUInt32,
P_NAMEString,
P_MFGRLowCardinality(String),
P_CATEGORYLowCardinality(String),
P_BRANDLowCardinality(String),
P_COLORLowCardinality(String),
P_TYPELowCardinality(String),
P_SIZEUInt8,
P_CONTAINERLowCardinality(String),
P_PLACEHOLDERNullable(String)
)
ENGINE=CnchMergeTreeORDERBYP_PARTKEY;
CREATETABLEssb_100.supplier
(
S_SUPPKEYUInt32,
S_NAMEString,
S_ADDRESSString,
S_CITYLowCardinality(String),
S_NATIONLowCardinality(String),
S_REGIONLowCardinality(String),
S_PHONEString,
S_PLACEHOLDERNullable(String)
)
ENGINE=CnchMergeTreeORDERBYS_SUPPKEY;
CREATETABLEssb_100.dwdate
(
D_DATEKEYUInt32,
D_DATEString,
D_DAYOFWEEKString, --definedinSection2.6asSize8, butWednesdayis9letters
D_MONTHString,
D_YEARUInt32,
D_YEARMONTHNUMUInt32,
D_YEARMONTHString,
D_DAYNUMINWEEKUInt32,
D_DAYNUMINMONTHUInt32,
D_DAYNUMINYEARUInt32,
D_MONTHNUMINYEARUInt32,
D_WEEKNUMINYEARUInt32,
D_SELLINGSEASONString,
D_LASTDAYINWEEKFLUInt32,
D_LASTDAYINMONTHFLUInt32,
D_HOLIDAYFLUInt32,
D_WEEKDAYFLUInt32,
S_PLACEHOLDERNullable(String)
)
ENGINE=CnchMergeTree() ORDERBY (D_DATEKEY);
SQL 执行完毕后,在控制台左侧对应的数据对象页面会展示出创建完成的五个工作表,分别为 customer,dwdate,lineorder以及part 和 supplier
步骤四:从对象存储中导入 SSB 数据
通过预先生成 SSB_100 GB 的数据集并存储在对象存储(如 AWS S3 或者 火山引擎 TOS),我们可以方便且快速的将数据导入到 ByteHouse 中进行分析。本次实践中通过配置 火山引擎 TOS 的数据源对数据进行导入。
首先在数据加载模块,新建对象存储数据源,并配置对应的秘钥连接火山引擎对象存储
连接新的数据源后,选择 bytehouse-shared-dataset 的储存桶和ssb_100/lineorder.csv 相应的路径
选择之前建的数据库ssb_100和对应标表lineorder,然后按创建。重复步骤为其他四个工作表数据加载。
数据源中存储的数据条数如下所示。用于导入完成后,对数据表的行数进行统计,进行准确性校验。
创建导入任务完成后,点击“开始”启动导入任务,任务启动后会在几秒钟内分配资源并初始化导入任务,并在导入过程中展示预估的时间和导入进度。在导入任务的执行详情中,可以查看导入状态、导入详细日志、配置信息等。
步骤五:数据处理及分析
1、原始查询测试
通过执行 SSB 的 13 条查询语句,对于多表关联和排序等场景进行性能测试。查询语句如下所示:
--pre-warm
select*fromssb_100.customerorderbyC_CUSTKEYdesclimit100;
select*fromssb_100.dwdateorderbyD_DATEKEYdesclimit100;
select*fromssb_100.lineorderorderbyLO_ORDERKEYdesclimit100;
select*fromssb_100.partorderbyP_PARTKEYdesclimit100;
select*fromssb_100.supplierorderbyS_SUPPKEYdesclimit100;
select*fromssb_100.lineorder_flatorderbyLO_ORDERKEYdesclimit100;
--Q1.1
selectsum(LO_EXTENDEDPRICE*LO_DISCOUNT) asrevenue
fromssb_100.lineorder
wheretoYear(LO_ORDERDATE) =1993
andLO_DISCOUNTbetween1and3
andLO_QUANTITY<25;
--Q1.2
selectsum(LO_EXTENDEDPRICE*LO_DISCOUNT) asrevenue
fromssb_100.lineorder
wheretoYYYYMM(LO_ORDERDATE) =199401
andLO_DISCOUNTbetween4and6
andLO_QUANTITYbetween26and35;
--Q1.3
selectsum(LO_EXTENDEDPRICE*LO_DISCOUNT) asrevenue
fromssb_100.lineorder
wheretoISOWeek(LO_ORDERDATE) =6
andtoYear(LO_ORDERDATE)=1994
andLO_DISCOUNTbetween5and7
andLO_QUANTITYbetween26and35;
--Q2.1
selectsum(LO_REVENUE), toYear(LO_ORDERDATE) ASd_year, P_BRAND
fromssb_100.lineorder, ssb_100.part, ssb_100.supplier
whereLO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEY
andP_CATEGORY='MFGR#53'andS_REGION='AMERICA'
GROUPBYd_year, P_BRAND;
--Q2.2
SELECTsum(LO_REVENUE), toYear(LO_ORDERDATE) ASyear, P_BRAND
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEY
andP_BRAND>='MFGR#2221'andP_BRAND<='MFGR#2228'andS_REGION='ASIA'
GROUPBYyear, P_BRAND
ORDERBYyear, P_BRAND;
--Q2.3
SELECTsum(LO_REVENUE), toYear(LO_ORDERDATE) ASyear, P_BRAND
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEY
andP_BRAND='MFGR#2239'andS_REGION='EUROPE'
GROUPBYyear, P_BRAND
ORDERBYyear, P_BRAND;
--Q3.1
SELECTC_NATION, S_NATION, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customer
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEYandLO_CUSTKEY=C_CUSTKEY
andC_REGION='ASIA'ANDS_REGION='ASIA'ANDyear>=1992ANDyear<=1997
GROUPBYC_NATION, S_NATION, year
ORDERBYyearASC, revenueDESC;
--Q3.2
SELECTC_CITY, S_CITY, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customer
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEYandLO_CUSTKEY=C_CUSTKEY
andC_NATION='UNITED STATES'ANDS_NATION='UNITED STATES'ANDyear>=1992ANDyear<=1997
GROUPBYC_CITY, S_CITY, year
ORDERBYyearASC, revenueDESC;
--Q3.3
SELECTC_CITY, S_CITY, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customer
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEYandLO_CUSTKEY=C_CUSTKEY
and (C_CITY='UNITED KI1'ORC_CITY='UNITED KI5') AND (S_CITY='UNITED KI1'ORS_CITY='UNITED KI5') ANDyear>=1992ANDyear<=1997
GROUPBYC_CITY, S_CITY, year
ORDERBYyearASC, revenueDESC;
--Q3.4
SELECTC_CITY, S_CITY, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customer
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEYandLO_CUSTKEY=C_CUSTKEY
and (C_CITY='UNITED KI1'ORC_CITY='UNITED KI5') AND (S_CITY='UNITED KI1'ORS_CITY='UNITED KI5') ANDtoYYYYMM(LO_ORDERDATE) =199712
GROUPBYC_CITY, S_CITY, year
ORDERBYyearASC, revenueDESC;
--Q4.1
SELECTtoYear(LO_ORDERDATE) ASyear, C_NATION, sum(LO_REVENUE-LO_SUPPLYCOST) ASprofit
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customer
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEYandLO_CUSTKEY=C_CUSTKEY
andC_REGION='AMERICA'ANDS_REGION='AMERICA'AND (P_MFGR='MFGR#1'ORP_MFGR='MFGR#2')
GROUPBYyear, C_NATION
ORDERBYyearASC, C_NATIONASC;
--Q4.2
SELECTtoYear(LO_ORDERDATE) ASyear, S_NATION, P_CATEGORY, sum(LO_REVENUE-LO_SUPPLYCOST) ASprofit
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier, ssb_100.customer
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEYandLO_CUSTKEY=C_CUSTKEY
andC_REGION='AMERICA'ANDS_REGION='AMERICA'AND (year=1997ORyear=1998) AND (P_MFGR='MFGR#1'ORP_MFGR='MFGR#2')
GROUPBYyear, S_NATION, P_CATEGORY
ORDERBYyearASC, S_NATIONASC, P_CATEGORYASC;
--Q4.3
SELECTtoYear(LO_ORDERDATE) ASyear, S_CITY, P_BRAND, sum(LO_REVENUE-LO_SUPPLYCOST) ASprofit
FROMssb_100.lineorder, ssb_100.part, ssb_100.supplier
WHERELO_PARTKEY=P_PARTKEYandLO_SUPPKEY=S_SUPPKEY
andS_NATION='UNITED STATES'AND (year=1997ORyear=1998) ANDP_CATEGORY='MFGR#14'
GROUPBYyear, S_CITY, P_BRAND
ORDERBYyearASC, S_CITYASC, P_BRANDASC;
2.打平表测试
为了方便对 SSB 数据集进行测试,我们可以通过改写 SSB,将星型模型打平转换为大宽表进行分析
注:为了确保打平表的执行,需要配置参数 SET max_memory_usage = 20000000000; 此外需要在 ByteHouse 控制台中配置查询超时为 3600s (我的账户 > 查询配置 > 查询超时),避免执行超时导致的失败。
SETmax_memory_usage=20000000000;
SETsend_timeout=3600;
SETreceive_timeout=3600;
CREATETABLEIFNOTEXISTSssb_100.lineorder_flat
engine=CnchMergeTree
partitionbytoYear(LO_ORDERDATE)
orderby (LO_ORDERDATE, LO_ORDERKEY) as
select
L.LO_ORDERKEYasLO_ORDERKEY,
L.LO_LINENUMBERasLO_LINENUMBER,
L.LO_CUSTKEYasLO_CUSTKEY,
L.LO_PARTKEYasLO_PARTKEY,
L.LO_SUPPKEYasLO_SUPPKEY,
L.LO_ORDERDATEasLO_ORDERDATE,
L.LO_ORDERPRIORITYasLO_ORDERPRIORITY,
L.LO_SHIPPRIORITYasLO_SHIPPRIORITY,
L.LO_QUANTITYasLO_QUANTITY,
L.LO_EXTENDEDPRICEasLO_EXTENDEDPRICE,
L.LO_ORDTOTALPRICEasLO_ORDTOTALPRICE,
L.LO_DISCOUNTasLO_DISCOUNT,
L.LO_REVENUEasLO_REVENUE,
L.LO_SUPPLYCOSTasLO_SUPPLYCOST,
L.LO_TAXasLO_TAX,
L.LO_COMMITDATEasLO_COMMITDATE,
L.LO_SHIPMODEasLO_SHIPMODE,
C.C_NAMEasC_NAME,
C.C_ADDRESSasC_ADDRESS,
C.C_CITYasC_CITY,
C.C_NATIONasC_NATION,
C.C_REGIONasC_REGION,
C.C_PHONEasC_PHONE,
C.C_MKTSEGMENTasC_MKTSEGMENT,
S.S_NAMEasS_NAME,
S.S_ADDRESSasS_ADDRESS,
S.S_CITYasS_CITY,
S.S_NATIONasS_NATION,
S.S_REGIONasS_REGION,
S.S_PHONEasS_PHONE,
P.P_NAMEasP_NAME,
P.P_MFGRasP_MFGR,
P.P_CATEGORYasP_CATEGORY,
P.P_BRANDasP_BRAND,
P.P_COLORasP_COLOR,
P.P_TYPEasP_TYPE,
P.P_SIZEasP_SIZE,
P.P_CONTAINERasP_CONTAINER
fromssb_100.lineorderasL
innerjoinssb_100.customerasConC.C_CUSTKEY=L.LO_CUSTKEY
innerjoinssb_100.supplierasSonS.S_SUPPKEY=L.LO_SUPPKEY
innerjoinssb_100.partasPonP.P_PARTKEY=L.LO_PARTKEY;
建表完成后,通过执行查询语句进行 SSB 性能测试,如下所示:
--F1.1
SELECTsum(LO_EXTENDEDPRICE*LO_DISCOUNT) ASrevenue
FROMssb_100.lineorder_flat
WHEREtoYear(LO_ORDERDATE) =1993
ANDLO_DISCOUNTBETWEEN1AND3
ANDLO_QUANTITY<25;
--F1.2
SELECTsum(LO_EXTENDEDPRICE*LO_DISCOUNT) ASrevenue
FROMssb_100.lineorder_flat
WHEREtoYYYYMM(LO_ORDERDATE) =199401
ANDLO_DISCOUNTBETWEEN4AND6
ANDLO_QUANTITYBETWEEN26AND35;
--F1.3
SELECTsum(LO_EXTENDEDPRICE*LO_DISCOUNT) ASrevenue
FROMssb_100.lineorder_flat
WHEREtoISOWeek(LO_ORDERDATE) =6
ANDtoYear(LO_ORDERDATE) =1994
ANDLO_DISCOUNTBETWEEN5AND7
ANDLO_QUANTITYBETWEEN26AND35;
--F2.1
SELECTsum(LO_REVENUE), toYear(LO_ORDERDATE) ASyear, P_BRAND
FROMssb_100.lineorder_flat
WHEREP_CATEGORY='MFGR#12'ANDS_REGION='AMERICA'
GROUPBYyear, P_BRAND
ORDERBYyear, P_BRAND;
--F2.2
SELECTsum(LO_REVENUE), toYear(LO_ORDERDATE) ASyear, P_BRAND
FROMssb_100.lineorder_flat
WHEREP_BRAND>='MFGR#2221'ANDP_BRAND<='MFGR#2228'ANDS_REGION='ASIA'
GROUPBYyear, P_BRAND
ORDERBYyear, P_BRAND;
--F2.3
SELECTsum(LO_REVENUE), toYear(LO_ORDERDATE) ASyear, P_BRAND
FROMssb_100.lineorder_flat
WHEREP_BRAND='MFGR#2239'ANDS_REGION='EUROPE'
GROUPBYyear, P_BRAND
ORDERBYyear, P_BRAND;
--F3.1
SELECTC_NATION, S_NATION, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder_flat
WHEREC_REGION='ASIA'ANDS_REGION='ASIA'ANDyear>=1992ANDyear<=1997
GROUPBYC_NATION, S_NATION, year
ORDERBYyearASC, revenueDESC;
--F3.2
SELECTC_CITY, S_CITY, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder_flat
WHEREC_NATION='UNITED STATES'ANDS_NATION='UNITED STATES'ANDyear>=1992ANDyear<=1997
GROUPBYC_CITY, S_CITY, year
ORDERBYyearASC, revenueDESC;
--F3.3
SELECTC_CITY, S_CITY, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder_flat
WHERE (C_CITY='UNITED KI1'ORC_CITY='UNITED KI5') AND (S_CITY='UNITED KI1'ORS_CITY='UNITED KI5') ANDyear>=1992ANDyear<=1997
GROUPBYC_CITY, S_CITY, year
ORDERBYyearASC, revenueDESC;
--F3.4
SELECTC_CITY, S_CITY, toYear(LO_ORDERDATE) ASyear, sum(LO_REVENUE) ASrevenue
FROMssb_100.lineorder_flat
WHERE (C_CITY='UNITED KI1'ORC_CITY='UNITED KI5') AND (S_CITY='UNITED KI1'ORS_CITY='UNITED KI5') ANDtoYYYYMM(LO_ORDERDATE) =199712
GROUPBYC_CITY, S_CITY, year
ORDERBYyearASC, revenueDESC;
--F4.1
SELECTtoYear(LO_ORDERDATE) ASyear, C_NATION, sum(LO_REVENUE-LO_SUPPLYCOST) ASprofit
FROMssb_100.lineorder_flat
WHEREC_REGION='AMERICA'ANDS_REGION='AMERICA'AND (P_MFGR='MFGR#1'ORP_MFGR='MFGR#2')
GROUPBYyear, C_NATION
ORDERBYyearASC, C_NATIONASC;
--F4.2
SELECTtoYear(LO_ORDERDATE) ASyear, S_NATION, P_CATEGORY, sum(LO_REVENUE-LO_SUPPLYCOST) ASprofit
FROMssb_100.lineorder_flat
WHEREC_REGION='AMERICA'ANDS_REGION='AMERICA'AND (year=1997ORyear=1998) AND (P_MFGR='MFGR#1'ORP_MFGR='MFGR#2')
GROUPBYyear, S_NATION, P_CATEGORY
ORDERBYyearASC, S_NATIONASC, P_CATEGORYASC;
--F4.3
SELECTtoYear(LO_ORDERDATE) ASyear, S_CITY, P_BRAND, sum(LO_REVENUE-LO_SUPPLYCOST) ASprofit
FROMssb_100.lineorder_flat
WHERES_NATION='UNITED STATES'AND (year=1997ORyear=1998) ANDP_CATEGORY='MFGR#14'
GROUPBYyear, S_CITY, P_BRAND
ORDERBYyearASC, S_CITYASC, P_BRANDASC;
III. 查询结果和成本分析
执行完毕后,统计查询结果如下所示:
注:查询结果因配置参数和资源配置的不同,耗时也有差异,欢迎联系 ByteHouse 进行查询优化。
查询完成后,在 ByteHouse 计算组详情页面可以查看工作负载,包括总查询条数和 CPU/Mem 利用率等,从而确认计算资源的使用情况。
根据本次压测进行预估,消耗计算和存储资源如下表所示,由于 ByteHouse 云数仓版本按使用量计费的能力,在空闲时支持自动关闭计算组并不收取闲置费用,从而能够极大的节省资源。测试完成后,预估的总体消耗约为 31.23 元。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/232680.html<

