没有合适的资源?快使用搜索试试~ 我知道了~
02_尚硅谷大数据技术之ClickHouse高级V1.01
需积分: 0 11 下载量 151 浏览量
2022-08-04
16:13:25
上传
评论
收藏 1.04MB PDF 举报
温馨提示
试读
30页
第 1 章 Explain 查看执行计划在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能可以看到,
资源详情
资源评论
资源推荐
尚硅谷大数据技术之 ClickHouse 高级
—————————————————————————————
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网
尚硅谷大数据技术之 ClickHouse 高级
(作者:尚硅谷研究院)
V1.0
第 1 章 Explain 查看执行计划
在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能
可以看到,并且只能真正执行 sql,在执行日志里面查看。在 20.6 版本引入了原生的执行计
划的语法。在 20.6.3 版本成为正式版本的功能。
本文档基于目前较新稳定版 21.7.3.14。
1.1 基本语法
EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting = value, ...]
SELECT ... [FORMAT ...]
➢ PLAN:用于查看执行计划,默认值。
◼ header 打印计划中各个步骤的 head 说明,默认关闭,默认值 0;
◼ description 打印计划中各个步骤的描述,默认开启,默认值 1;
◼ actions 打印计划中各个步骤的详细信息,默认关闭,默认值 0。
➢ AST :用于查看语法树;
➢ SYNTAX:用于优化语法;
➢ PIPELINE:用于查看 PIPELINE 计划。
◼ header 打印计划中各个步骤的 head 说明,默认关闭;
◼ graph 用 DOT 图形语言描述管道图,默认关闭,需要查看相关的图形需要配合
graphviz 查看;
◼ actions 如果开启了 graph,紧凑打印打,默认开启。
注:
PLAN
和
PIPELINE
还可以进行额外的显示设置,如上参数所示。
尚硅谷大数据技术之 ClickHouse 高级
—————————————————————————————
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网
1.2 案例实操
1.2.1 新版本使用 EXPLAIN
可以再安装一个 20.6 以上版本,或者直接在官网的在线 demo,选择高版本进行测试。
官网在线测试链接:https://play.clickhouse.tech/?file=welcome
1)查看 PLAIN
简单查询
explain plan select arrayJoin([1,2,3,null,null]);
复杂 SQL 的执行计划
explain select database,table,count(1) cnt from system.parts where
database in ('datasets','system') group by database,table order by
database,cnt desc limit 2 by database;
打开全部的参数的执行计划
EXPLAIN header=1, actions=1,description=1 SELECT number from
system.numbers limit 10;
2)AST 语法树
EXPLAIN AST SELECT number from system.numbers limit 10;
3)SYNTAX 语法优化
//先做一次查询
SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM
numbers(10);
//查看语法优化
EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' :
'atguigu') FROM numbers(10);
//开启三元运算符优化
SET optimize_if_chain_to_multiif = 1;
//再次查看语法优化
EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' :
'atguigu') FROM numbers(10);
//返回优化后的语句
SELECT multiIf(number = 1, \'hello\', number = 2, \'world\', \'xyz\')
FROM numbers(10)
4)查看 PIPELINE
EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY
number % 20;
//打开其他参数
EXPLAIN PIPELINE header=1,graph=1 SELECT sum(number) FROM
numbers_mt(10000) GROUP BY number%20;
1.2.2 老版本查看执行计划
clickhouse-client -h 主机名 --send_logs_level=trace <<< "sql" > /dev/null
其中,send_logs_level 参数指定日志等级为 trace,<<<将 SQL 语句重定向至 clickhouse-
尚硅谷大数据技术之 ClickHouse 高级
—————————————————————————————
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网
client 进行查询,> /dev/null 将查询结果重定向到空设备吞掉,以便观察日志。
注意:
1、通过将 ClickHouse 的服务日志,设置到 DEBUG 或者 TRACE 级别,才可以变相实现
EXPLAIN 查询的作用。
2、需要真正的执行 SQL 查询,CH 才能打印计划日志,所以如果表的数据量很大,最好
借助 LIMIT 子句,减小查询返回的数据量。
第 2 章 建表优化
2.1 数据类型
2.1.1 时间字段的类型
建表时能用数值型或日期时间型表示的字段就不要用字符串,全 String 类型在以 Hive
为中心的数仓建设中常见,但 ClickHouse 环境不应受此影响。
虽然 ClickHouse 底层将 DateTime 存储为时间戳 Long 类型,但不建议存储 Long 类型,
因为 DateTime 不需要经过函数转换处理,执行效率高、可读性好。
create table t_type2(
id UInt32,
sku_id String,
total_amount Decimal(16,2) ,
create_time Int32
) engine =ReplacingMergeTree(create_time)
partition by toYYYYMMDD(toDate(create_time)) –-需要转换一次,否则报错
primary key (id)
order by (id, sku_id);
2.1.2 空值存储类型
官方已经指出 Nullable 类型几乎总是会拖累性能,因为存储 Nullable 列时需要创建一个
额外的文件来存储 NULL 的标记,并且 Nullable 列无法被索引。因此除非极特殊情况,应直
接使用字段默认值表示空,或者自行指定一个在业务中无意义的值(例如用-1 表示没有商品
ID)。
CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog;
INSERT INTO t_null VALUES (1, NULL), (2, 3);
SELECT x + y FROM t_null;
查看存储的文件:(没有权限就用 root 用户)
尚硅谷大数据技术之 ClickHouse 高级
—————————————————————————————
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网
官网说明:https://clickhouse.tech/docs/zh/sql-reference/data-types/nullable/
2.2 分区和索引
分区粒度根据业务特点决定,不宜过粗或过细。一般选择按天分区,也可以指定为 Tuple(),
以单表一亿数据为例,分区大小控制在 10-30 个为最佳。
必须指定索引列,ClickHouse 中的索引列即排序列,通过 order by 指定,一般在查询条
件中经常被用来充当筛选条件的属性被纳入进来;可以是单一维度,也可以是组合维度的索
引;通常需要满足高级列在前、查询频率大的在前原则;还有基数特别大的不适合做索引列,
如用户表的 userid 字段;通常筛选后的数据满足在百万以内为最佳。
比如官方案例的 hits_v1 表:
……
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
……
visits_v1 表:
……
PARTITION BY toYYYYMM(StartDate)
ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID)
……
2.3 表参数
Index_granularity 是用来控制索引粒度的,默认是 8192,如非必须不建议调整。
如果表中不是必须保留全量历史数据,建议指定 TTL(生存时间值),可以免去手动过期
历史数据的麻烦,TTL 也可以通过 alter table 语句随时修改。(参考基础文档 4.4.5 数据 TTL)
2.4 写入和删除优化
(1)尽量不要执行单条或小批量删除和插入操作,这样会产生小分区文件,给后台
Merge 任务带来巨大压力
(2)不要一次写入太多分区,或数据写入太快,数据写入太快会导致 Merge 速度跟不
上而报错,一般建议每秒钟发起 2-3 次写入操作,每次操作写入 2w~5w 条数据(依服务器
性能而定)
尚硅谷大数据技术之 ClickHouse 高级
—————————————————————————————
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网
写入过快报错,报错信息:
1. Code: 252, e.displayText() = DB::Exception: Too many parts(304).
Merges are processing significantly slower than inserts
2. Code: 241, e.displayText() = DB::Exception: Memory limit (for query)
exceeded:would use 9.37 GiB (attempt to allocate chunk of 301989888
bytes), maximum: 9.31 GiB
处理方式:
“ Too many parts 处理 ” :使用 WAL 预写日志,提高写入性能。
in_memory_parts_enable_wal 默认为 true
在服务器内存充裕的情况下增加内存配额,一般通过 max_memory_usage 来实现
在服务器内存不充裕的情况下,建议将超出部分内容分配到系统硬盘上,但会降低执行
速度,一般通过 max_bytes_before_external_group_by、max_bytes_before_external_sort 参数
来实现。
2.5 常见配置
配置项主要在 config.xml 或 users.xml 中, 基本上都在 users.xml 里
➢ config.xml 的配置项
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/
➢ users.xml 的配置项
https://clickhouse.tech/docs/en/operations/settings/settings/
2.5.1 CPU 资源
配置
描述
background_pool_size
后台线程池的大小,merge 线程就是在该线程池中执行,该线程池
不仅仅是给 merge 线程用的,默认值 16,允许的前提下建议改成 c
pu 个数的 2 倍(线程数)。
background_schedule_pool_size
执行后台任务(复制表、Kafka 流、DNS 缓存更新)的线程数。默
认 128,建议改成 cpu 个数的 2 倍(线程数)。
background_distributed_schedule_
pool_size
设置为分布式发送执行后台任务的线程数,默认 16,建议改成 cpu
个数的 2 倍(线程数)。
max_concurrent_queries
最大并发处理的请求数(包含 select,insert 等),默认值 100,推荐 1
50(不够再加)~300。
max_threads
设置单个查询所能使用的最大 cpu 个数,默认是 cpu 核数
剩余29页未读,继续阅读
顾露
- 粉丝: 15
- 资源: 315
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【老生谈算法】Matlab中使用Plot函数动态画图方法.docx
- 画出一个好看的玫瑰曲线(可供学习)
- 【老生谈算法】matlab实现非线性整数规划的遗传算法.doc
- Pearson相关性分析
- 【老生谈算法】matlab实现BP神经网络算法.doc
- 518746343587864SMRTE3.9-20221025配合GT1.9以上.apk
- 基于YOLOv5+Deepsort实现车辆行人追踪和计数源码+说明文档(高分项目).zip
- Spring Cloud核心组件详解.rar
- 大学生熬夜现象调查及对策研...于湛江市4所高校的调查数据_莫虹.caj
- (python源码)基于python的机器学习算法实现,包括许多机器学习方法,如:SVM,rfr, gbr等
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0