Dataflow BigQuery to ClickHouse 模板
BigQuery 到 ClickHouse 模板是一个批处理管道,用于将数据从 BigQuery 表导入 ClickHouse 表。该模板可以读取整个表或使用提供的 SQL 查询过滤特定记录。
管道要求
- 源 BigQuery 表必须存在。
- 目标 ClickHouse 表必须存在。
- ClickHouse 主机必须可从 Dataflow 工作节点访问。
模板参数
参数名称 | 参数描述 | 是否必需 | 备注 |
---|---|---|---|
jdbcUrl | ClickHouse JDBC URL,格式为 jdbc:clickhouse://<host>:<port>/<schema> 。 | ✅ | 不要将用户名和密码作为 JDBC 选项添加。可以在 JDBC URL 的末尾添加其他 JDBC 选项。对于 ClickHouse Cloud 用户,请在 jdbcUrl 中添加 ssl=true&sslmode=NONE 。 |
clickHouseUsername | 用于身份验证的 ClickHouse 用户名。 | ✅ | |
clickHousePassword | 用于身份验证的 ClickHouse 密码。 | ✅ | |
clickHouseTable | 数据将被插入的目标 ClickHouse 表。 | ✅ | |
maxInsertBlockSize | 控制插入块创建的最大块大小(ClickHouseIO 选项)。 | ClickHouseIO 选项。 | |
insertDistributedSync | 如果启用设置,插入查询到分布式等待,直到所有集群节点都收到数据。(ClickHouseIO 选项)。 | ClickHouseIO 选项。 | |
insertQuorum | 对于复制表中的 INSERT 查询,等待指定数量的副本写入并线性化数据添加。 0 - 禁用。 | ClickHouseIO 选项。此设置在默认服务器设置中禁用。 | |
insertDeduplicate | 对于复制表中的 INSERT 查询,指定应执行插入块的去重。 | ClickHouseIO 选项。 | |
maxRetries | 每次插入的最大重试次数。 | ClickHouseIO 选项。 | |
InputTableSpec | 要读取的 BigQuery 表。指定 inputTableSpec 或 query 之一。如果两者都设置,query 参数优先。示例:<BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE> 。 | 使用 BigQuery Storage Read API 直接从 BigQuery 存储读取数据。请注意 Storage Read API 限制。 | |
outputDeadletterTable | 用于存储未能到达输出表的消息的 BigQuery 表。如果表不存在,则在管道执行期间创建。如果未指定,则使用 <outputTableSpec>_error_records 。例如,<PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE> 。 | ||
query | 用于从 BigQuery 读取数据的 SQL 查询。如果 BigQuery 数据集在与 Dataflow 作业不同的项目中,请在 SQL 查询中指定完整的数据集名称,例如:<PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME> 。默认为 GoogleSQL,除非 useLegacySql 为 true。 | 必须指定 inputTableSpec 或 query 中的一个。如果同时设置两个参数,则模板使用 query 参数。示例:SELECT * FROM sampledb.sample_table 。 | |
useLegacySql | 设置为 true 以使用传统 SQL。此参数仅在使用 query 参数时适用。默认为 false 。 | ||
queryLocation | 当从没有底层表权限的授权视图中读取时需要。例如,US 。 | ||
queryTempDataset | 设置现有数据集以创建临时表以存储查询结果。例如,temp_dataset 。 | ||
KMSEncryptionKey | 如果使用查询源从 BigQuery 读取,请使用此 Cloud KMS 密钥加密创建的任何临时表。例如,projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key 。 |
所有 ClickHouseIO
参数的默认值可以在 ClickHouseIO
Apache Beam Connector 中找到。
源和目标表架构
为了有效地将 BigQuery 数据集加载到 ClickHouse,管道执行以下阶段的列推断过程:
- 模板根据目标 ClickHouse 表构建架构对象。
- 模板遍历 BigQuery 数据集,并根据列名尝试匹配列。
也就是说,您的 BigQuery 数据集(表或查询)必须与 ClickHouse 目标表具有完全相同的列名。
数据类型映射
BigQuery 类型根据您的 ClickHouse 表定义进行转换。因此,上表列出了您在目标 ClickHouse 表中应具备的推荐映射(针对给定的 BigQuery 表/查询):
BigQuery 类型 | ClickHouse 类型 | 备注 |
---|---|---|
数组类型 | 数组类型 | 内部类型必须是此表中列出的有效原始数据类型之一。 |
布尔类型 | 布尔类型 | |
日期类型 | 日期类型 | |
日期时间类型 | 日期时间类型 | 同样适用于 Enum8 、Enum16 和 FixedString 。 |
字符串类型 | 字符串类型 | 在 BigQuery 中,所有整数类型(INT 、SMALLINT 、INTEGER 、BIGINT 、TINYINT 、BYTEINT )都是 INT64 的别名。我们建议您在 ClickHouse 设置正确的整数大小,因为模板会根据定义的列类型转换列(Int8 、Int16 、Int32 、Int64 )。 |
数字 - 整数类型 | 整数类型 | 在 BigQuery 中,所有整数类型(INT 、SMALLINT 、INTEGER 、BIGINT 、TINYINT 、BYTEINT )都是 INT64 的别名。我们建议您在 ClickHouse 设置正确的整数大小,因为模板会根据定义的列类型转换列(Int8 、Int16 、Int32 、Int64 )。模板还会转换在 ClickHouse 表中使用的未指定整数类型(UInt8 、UInt16 、UInt32 、UInt64 )。 |
数字 - 浮点类型 | 浮点类型 | 支持的 ClickHouse 类型:Float32 和 Float64 |
运行模板
BigQuery 到 ClickHouse 模板可通过 Google Cloud CLI 执行。
务必查看本文档,特别是上述部分,以全面了解模板的配置要求和先决条件。
- Google Cloud 控制台
- Google Cloud CLI
登录到您的 Google Cloud 控制台并搜索 DataFlow。
- 按下
CREATE JOB FROM TEMPLATE
按钮 - 模板表单打开后,输入作业名称并选择所需区域。
- 在
DataFlow Template
输入框中,输入ClickHouse
或BigQuery
,并选择BigQuery 到 ClickHouse
模板 - 选中后,表单将展开以允许您提供其他详细信息:
- ClickHouse 服务器 JDBC URL,格式为
jdbc:clickhouse://host:port/schema
。 - ClickHouse 用户名。
- ClickHouse 目标表名称。
- ClickHouse 服务器 JDBC URL,格式为
ClickHouse 密码选项被标记为可选,适用于未配置密码的用例。
要添加它,请向下滚动到 Password for ClickHouse Endpoint
选项。

- 根据 模板参数 部分的详细信息自定义并添加任何与 BigQuery/ClickHouseIO 相关的配置。
安装与配置 gcloud
CLI
- 如果尚未安装,请安装
gcloud
CLI。 - 请遵循 this guide 中的
Before you begin
部分,为运行 DataFlow 模板设置所需的配置、设置和权限。
运行命令
使用 gcloud dataflow flex-template run
命令运行一个使用 Flex Template 的 Dataflow 作业。
以下是命令的示例:
命令分解
- 作业名称: 跟随
run
关键字的文本是唯一的作业名称。 - 模板文件: 由
--template-file-gcs-location
指定的 JSON 文件定义了模板结构以及接受的参数的详细信息。提到的文件路径是公共的并准备好使用。 - 参数: 参数用逗号分隔。对于基于字符串的参数,将值用双引号括起来。
预期响应
运行命令后,您应该看到类似于以下的响应:
监控作业
导航到您的 Google Cloud 控制台中的 Dataflow Jobs tab 以监控作业的状态。您将找到作业的详细信息,包括进度和任何错误:

故障排除
内存限制(总)超出错误(代码 241)
当 ClickHouse 在处理大型数据批次时内存不足时,会出现此错误。为解决此问题:
- 增加实例资源:将 ClickHouse 服务器升级到更大的实例,以便拥有更多内存来处理数据处理负荷。
- 减少批量大小:调整 Dataflow 作业配置中的批量大小,以便将较小的数据块发送到 ClickHouse,降低每个批次的内存消耗。这些更改可以帮助在数据摄取期间平衡资源使用。
模板源代码
模板的源代码可在 ClickHouse 的 DataflowTemplates 分支中找到。