clickhouse 子查询_TPCDS用于Clickhouse和Doris性能测试
大致介绍
TPC-DS采用星型、雪花型等多维数据模式。它包含7张事实表,17张纬度表平均每张表含有18列。其工作负载包含99个SQL查询,覆盖SQL99和2003的核心部分以及OLAP。这个测试集包含对大数据集的统计、报表生成、联机查询、数据挖掘等复杂应用,测试用的数据和值是有倾斜的,与真实数据一致。可以说TPC-DS是与真实场景非常接近的一个测试集,也是难度较大的一个测试集。
Clickhouse是俄罗斯Yandex公司开源的一个非常快的数据管理系统,性能非常强悍。Apache Doris是百度开源的另一个基于 MPP 的交互式 SQL 数据仓库,主要用于解决报表和多维分析,成熟稳定。
下载编译
下载官方网址
也可以通过Git下载
git clone https://github.com/gregrahn/tpcds-kit.gitcd tpcds-kit/toolsmake OS=LINUX
1
2
3
tpcds.sql是建表SQL[tools]$ ll *.sql-rw-r----- 1 prodadmin prodadmin 13875 Mar 12 03:44 tpcds_ri.sql-rw-r----- 1 prodadmin prodadmin 22153 Mar 12 03:44 tpcds_source.sql-rw-r----- 1 prodadmin prodadmin 30001 Mar 12 03:44 tpcds.sql
1
2
3
4
5
dsdgen是生成数据的工具,dsqgen是生成Query的工具[tools]$ ll ds*-rwxr-x--- 1 prodadmin prodadmin 455880 Apr 16 19:15 dsdgen-rwxr-x--- 1 prodadmin prodadmin 292254 Apr 16 19:15 dsqgen
1
2
3
4
在query_templates中是query模板[tools]$ ls ../query_templates/ansi.tpl query12.tpl query18.tpl query23.tpl query29.tpl query34.tpl query3.tpl query45.tpl query50.tpl query56.tpl query61.tpl query67.tpl query72.tpl query78.tpl query83.tpl query89.tpl query94.tpl query9.tpldb2.tpl query13.tpl query19.tpl query24.tpl query2.tpl query35.tpl query40.tpl query46.tpl query51.tpl query57.tpl query62.tpl query68.tpl query73.tpl query79.tpl query84.tpl query8.tpl query95.tpl READMEnetezza.tpl query14.tpl query1.tpl query25.tpl query30.tpl query36.tpl query41.tpl query47.tpl query52.tpl query58.tpl query63.tpl query69.tpl query74.tpl query7.tpl query85.tpl query90.tpl query96.tpl sqlserver.tploracle.tpl query15.tpl query20.tpl query26.tpl query31.tpl query37.tpl query42.tpl query48.tpl query53.tpl query59.tpl query64.tpl query6.tpl query75.tpl query80.tpl query86.tpl query91.tpl query97.tpl templates.lstquery10.tpl query16.tpl query21.tpl query27.tpl query32.tpl query38.tpl query43.tpl query49.tpl query54.tpl query5.tpl query65.tpl query70.tpl query76.tpl query81.tpl query87.tpl query92.tpl query98.tplquery11.tpl query17.tpl query22.tpl query28.tpl query33.tpl query39.tpl query44.tpl query4.tpl query55.tpl query60.tpl query66.tpl query71.tpl query77.tpl query82.tpl query88.tpl query93.tpl query99.tpl
1
2
3
4
5
6
7
8
建表语句
请根据Hive、Doris、Clickhouse等组件特点,修改建表语句,请注意,列是否为空,列的顺序等和后面步骤的导入数据密切相关,请勿轻易修改。
1 Clickhouse数据类型
2 Doris建表和数据类型
create table dbgen_versioncreate table customer_addresscreate table customer_demographicscreate table date_dimcreate table warehousecreate table ship_modecreate table time_dimcreate table reasoncreate table income_bandcreate table itemcreate table storecreate table call_centercreate table customercreate table web_sitecreate table store_returnscreate table household_demographicscreate table web_pagecreate table promotioncreate table catalog_pagecreate table inventorycreate table catalog_returnscreate table web_returnscreate table web_salescreate table catalog_salescreate table store_sales
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
数据生成
可以建一个脚本,来生成数据
1 数据分隔符是“|”,空值默认为空。Clickhouse支持的格式,Doris Load格式。
2 scale单位为G,指生成的数据量大小,paralle指分割多少个文件,child指第几个文件
[tools]$ cat build_data_tsv.hecho $1mkdir ../../data_tsv/nohup ./dsdgen -scale 100 -dir ../../data_tsv/ -paralle 10 -child $1 > child$1.log &
1
2
3
4
数据导入
Clickhouse数据导入,一个例子,我写了一个convert.py的小脚本,处理分隔符、空值、列顺序等问题
if [ ! -f "./data_tsv/dbgen_version_$1_10.done" ]; thencat ./data_tsv/dbgen_version_$1_10.dat|python convert.py ck|clickhouse-client --query="INSERT INTO default.dbgen_version_dist FORMAT CSV"touch ./data_tsv/dbgen_version_$1_10.donefi
1
2
3
4
Doris数据导入
cat ./data_tsv/dbgen_version_$1_10.dat|python convert.py dr dbgen_version|curl --location-trusted -u root: -H "label:dbgen_version_$1_10_" -H "timeout:1200" -T - http://ip:port/api/testdb/dbgen_version/_stream_load
1
生成Query
cat build_sql.sh./dsqgen \-DIRECTORY ../query_templates \-INPUT ../query_templates/templates.lst \-VERBOSE Y \-QUALIFY Y \-SCALE 100 \-DIALECT sqlserver \-OUTPUT_DIR ../../query/
1
2
3
4
5
6
7
8
9
Query改写
比如如下的SQL,在Doris中是可以正确的执行的,但是在Clickhouse中不行,CK中需要子查询嵌套或者用global inner join来显示指定broadcast的字表。
select c_last_name,c_first_name,substr(s_city,1,30),ss_ticket_number,amt,profit from (select ss_ticket_number ,ss_customer_sk ,store.s_city ,sum(ss_coupon_amt) amt ,sum(ss_net_profit) profit from store_sales,date_dim,store,household_demographics where store_sales.ss_sold_date_sk = date_dim.d_date_sk and store_sales.ss_store_sk = store.s_store_sk and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk and (household_demographics.hd_dep_count = 1 or household_demographics.hd_vehicle_count > -1) and date_dim.d_dow = 1 and date_dim.d_year in (2000,2000+1,2000+2) and store.s_number_employees between 200 and 295 group by ss_ticket_number,ss_customer_sk,ss_addr_sk,store.s_city) ms,customer where ss_customer_sk = c_customer_sk order by c_last_name,c_first_name,substr(s_city,1,30), profit limit 10;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
改写后
select c_last_name, c_first_name, substr(tbl1.s_city,1,30), ss_ticket_number, amt, profitfrom customer_distglobal inner join ( select ss_ticket_number, ss_customer_sk, s_city, sum(ss_coupon_amt) as amt, sum(ss_net_profit) as profit from store_sales_dist global inner join ( select d_date_sk from date_dim_dist where date_dim_dist.d_dow = 1 and d_year in (2000,2000+1,2000+2) ) on ss_sold_date_sk = d_date_sk global inner join ( select s_store_sk, s_city from store_dist where s_number_employees between 200 and 295 ) on ss_store_sk = s_store_sk global inner join ( select hd_demo_sk from household_demographics_dist where hd_dep_count = 1 or hd_vehicle_count > -1 ) on ss_hdemo_sk = hd_demo_sk group by ss_ticket_number, ss_customer_sk, ss_addr_sk, s_city) tbl1 on ss_customer_sk = c_customer_skorder by c_last_name, c_first_name, substr(s_city,1,30), profitlimit 10;
1
2
3
4
5
6
7
8
9
10
11
12
测试结论
1 导入数据Clickhouse快
2 数据压缩率Clickhouse好
3 单表查询Clickhouse快
4 Join查询两者各有优劣,数据量小情况下Clickhouse好,数据量大Doris好
5 Doris对SQL支持情况要好
clickhouse 子查询_TPCDS用于Clickhouse和Doris性能测试相关推荐
- clickhouse 子查询_clickHouse 常用命令
---客户端链接工具 clickhouse-client -m -u root -p root --大小写敏感的 CREATE TEMPORARY TABLE IF NOT EXISTS test.m ...
- clickhouse 子查询_Clickhouse 查询分布式表子查询 (Distributed Subqueries )
官方文档:https://clickhouse.tech/docs/en/sql-reference/operators/in/#select-distributed-subqueries 在分布式表 ...
- MySQL 学习笔记(16)— 子查询(单行单列、一行多列、多行多列、 ALL、ANY、SOME 运算符、EXISTS 操作符)
1. 子查询概念 子查询是指嵌套在其他语句(SELECT . INSERT . UPDATE . DELETE 等)中的 SELECT 语句:子查询也称为内查询( inner query )或者嵌套查 ...
- mysql子查询日期比较_数据分析系列 16/32 | MySQL中子查询与联合查询
前面说了很多MySQL中的查询,比如条件查询.分组聚合查询.连接查询,今天来说一下另外两个非常的重要的查询,MySQL中的子查询和联合查询. PART01 子查询 子查询也称嵌套查询,是将一个查询语句 ...
- mysql+sql+子查询语句_SQL子查询
子查询或内部查询或嵌套查询在另一个SQL查询的查询和嵌入式WHERE子句中. 子查询用于返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据. 子查询可以在SELECT,INSERT,UPDA ...
- mysql rand() 子查询_MySQL ------ 子查询(十三)
查询(query):任何SQL 都是查询,但此术语一般指select 语句 子查询(subquery):嵌套在查询中的查询,MySQL4.1 引入对子查询的支持. 接下来得就比较有意思了,需要你对于表 ...
- stotybord如何添加子视图_SQL复杂查询-子查询
视图: 1.视图的概念引入: SQL数据库里面存放的是SQL语句,视图中查看到的SQL查询语句,当我们运用客户端连接到视图时候,视图会运行里面的查询语句,从库中查找出数据,保存在临时表里面.当客户端和 ...
- sql 子查询 嵌套查询_SQL子查询– SQL中的嵌套查询
sql 子查询 嵌套查询 In the real world, there are times when we need a particular set of data but we don't h ...
- 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)
子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...
最新文章
- HDU1874(Dijstra算法)
- python爬虫和信息收集_python爬站长之家写一个信息搜集器
- C++显式隐式构造函数
- Flutter入门:dart基础
- 用python自制背单词程序_c++自制背单词应用
- CSS——设置第一个以外的元素样式:not(:first-child),设置最后一个除外的元素样式:not(:last-child)
- 不卖了?这家公司暂停门店销售iPhone!
- Systemd基础篇:systemd vs SysVinit
- 聊聊程序员的简历应该怎么写(帮修改简历)
- 视频截取程序matlab,通过matlab截取视频
- 最新1000道高频Java面试题,包含25个技术栈等面试攻略(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构
- Dreamweaver CS6下载及安装步骤
- 聚焦物流4大场景,RPA如何降低物流企业运营成本
- 关于罗德里格斯公式(Rodrigues‘sFormula)的详细推导过程
- 山沟沟里的技术脱贫:阿里工程师助平武蜂农物联网养蜂
- 第十五届吉林省大学生程序设计竞赛个人题解
- 2017 9 25翁凯html学习记录
- c#中继承和接口的区别与联系
- 有50级台阶,每次走一阶或两阶,有多少种走法?
- 机器学习实验之顾客购买服装的分析与预测