ByteHouse 云数仓版作为云原生数据仓库,逐渐引入了对 ELT(Extract-Load-Transform,提取-加载-转换)的支持,您可以避免维护多个异构数据系统。
在数据加载进数据库之前,往往需要经过复杂的数据清洗和转换过程,这是人们所熟知的 ETL。而在之前的工程实践中,这部分工作是由一些外部的数仓工具来完成的,比如典型的 Hive、Spark SQL 等。ByteHouse 不断努力拓展边界,减少数据加工和数据分析之间多系统耦合带来的运维负担。把数据加工(T)的过程转移到 ByteHouse 内部,使其能够一站式完成数据接入、加工和分析,具备了完备的数据仓库能力。
ClickHouse 从设计之初是面向 OLAP(在线分析)场景,无论是列存、索引还是执行向量化的优化,他们都有效地应对大宽表的聚合计算。
针对复杂查询,尤其是数据仓库中典型的 ETL 任务来说,ClickHouse 则并不擅长。结构复杂、耗时较长的数据加工作业,通常需要复杂的调优过程。典型的问题如下:
针对以上问题,ByteHouse 团队在高性能计算框架的基础上,增加了对 BSP(Bulk Synchronous Parallel)模式的支持:可以进行任务(task)级别的容错和更细粒度的调度,在将来会支持资源感知的调度。可以给用户带来以下收益:
ByteHouse 当前支持通过设置计算组类型或通过参数设置使用 ELT 能力。设置计算组类型可参考创建/编辑计算组。
您也可以通过设置计算组级别参数或在 query settings 中通过增加下面的参数来使用 ELT 能力:
Settings 参数名称 | 类型 | 默认值 | 含义 |
|---|---|---|---|
bsp_mode | Bool | 0 | 打开 BSP 模式,query 会分阶段执行。在失败时会进行任务(task)级别的重试。 |
distributed_max_parallel_size | UInt64 | 等于worker数量 | 当单个查询占用内存较大时,通过调大此参数可以增加算子的并行度,减少单个并行度处理数据的数量,减少单位时间内存使用量。必须在打开 |
bsp_max_retry_num | UInt64 | 3 | 任务最大的重试次数。以任务(task)粒度记数,默认为 3 次。 |
disk_shuffle_files_codec | LZ4/ZSTD/NONE | LZ4 | Shuffle 文件采用的编码,能有效减少磁盘占用。 |
use_bsp_in_insert_select | Bool | 0 | 对所有的 insert 语句,默认使用 BSP 模式。 |
以上选项可以设置在计算组级别,也可以在 session 级别或者 SQL 级别设定。
计算组级别设置参数请参见设置计算组参数。
如果在 session 级别设置参数,可参考以下示例:
set bsp_mode = 1; insert into demo_db.demo_tb select * from tb1 join tb2 on tb1.id = tb2.id;
如果在 SQL 级别设置参数,可参考以下示例:
insert into demo_db.demo_tb select * from tb1 join tb2 on tb1.id = tb2.id settings bsp_mode =1;
你可以在 bsp_mode 后按需添加相应配置项。