You need to enable JavaScript to run this app.
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
开发参考
ELT 开发
复制全文
ELT 开发

ByteHouse 云数仓版作为云原生数据仓库,逐渐引入了对 ELT(Extract-Load-Transform,提取-加载-转换)的支持,您可以避免维护多个异构数据系统。

概述

在数据加载进数据库之前,往往需要经过复杂的数据清洗和转换过程,这是人们所熟知的 ETL。而在之前的工程实践中,这部分工作是由一些外部的数仓工具来完成的,比如典型的 Hive、Spark SQL 等。ByteHouse 不断努力拓展边界,减少数据加工和数据分析之间多系统耦合带来的运维负担。把数据加工(T)的过程转移到 ByteHouse 内部,使其能够一站式完成数据接入、加工和分析,具备了完备的数据仓库能力。

Image

背景

ClickHouse 从设计之初是面向 OLAP在线分析场景,无论是列存、索引还是执行向量化的优化,他们都有效地应对大宽表的聚合计算。
针对复杂查询,尤其是数据仓库中典型的 ETL 任务来说,ClickHouse 则并不擅长。结构复杂耗时较长的数据加工作业通常需要复杂的调优过程。典型的问题如下:

  • 重试成本高:对于运行时长在分钟级甚至小时级的 ETL 作业,如果运行过程中出现失败,ClickHouse 只能进行 query 级别的重试。从头重试不仅造成大量的资源浪费,也对加工任务的 SLA 提出了挑战。
  • 资源占用巨大:由于缺少迭代计算和有效的任务拆分,在查询数据量大、计算复杂的情况下,通常要求节点有充足的内存进行处理。
  • 并发控制:当多个查询同时运行时,ClickHouse 并不会根据资源的使用情况进行调度。任务之间相互挤压会导致失败(通常是 Memory limit 错误)。叠加重试机制的缺乏,通常会引起雪崩效应。

针对以上问题,ByteHouse 团队在高性能计算框架的基础上,增加了对 BSP(Bulk Synchronous Parallel)模式的支持:可以进行任务(task)级别的容错和更细粒度的调度,在将来会支持资源感知的调度。可以给用户带来以下收益:

  • 当 query 运行中遇到错误时,可以自动重试当前的任务,而不是从头进行重试。大大减少重试成本。
  • 当 query 需要的内存巨大,甚至大于单机的内存时,可以通过增加并行度来减少单位时间内内存的占用。只需要调大并行度参数即可,理论上是可以无限扩展的。
  • 可以根据集群资源使用情况有序调度并发 ETL 任务,从而减少资源的挤占,避免频繁失败。

使用 ByteHouse ELT

ByteHouse 当前支持通过设置计算组类型或通过参数设置使用 ELT 能力。设置计算组类型可参考创建/编辑计算组
您也可以通过设置计算组级别参数或在 query settings 中通过增加下面的参数来使用 ELT 能力:

Settings 参数名称

类型

默认值

含义

bsp_mode

Bool

0

打开 BSP 模式,query 会分阶段执行。在失败时会进行任务(task)级别的重试。

distributed_max_parallel_size

UInt64

等于worker数量

当单个查询占用内存较大时,通过调大此参数可以增加算子的并行度,减少单个并行度处理数据的数量,减少单位时间内存使用量。必须在打开 bsp_mode 下才能超出 worker 的数量。建议设置为 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 后按需添加相应配置项。

最近更新时间:2026.01.20 10:57:50
这个页面对您有帮助吗?
有用
有用
无用
无用