Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Dataflow:BigQuery 到 ClickHouse 模板

BigQuery 到 ClickHouse 的模板是一个批次管道,用于将 BigQuery 表中的数据摄取到 ClickHouse 表中。 该模板可以读取整个表,也可以使用提供的 SQL 查询过滤特定记录。

管道要求

  • 源 BigQuery 表必须存在。
  • 目标 ClickHouse 表必须存在。
  • 必须能够从 Dataflow 工作节点访问 ClickHouse 主机。

Template参数



参数名称 参数说明 必填 说明
jdbcUrl ClickHouse JDBC URL,格式为 jdbc:clickhouse://<host>:<port>/<schema>。 ✅ 不要将用户名和密码作为 JDBC 选项添加。其他 JDBC 选项可附加在 JDBC URL 末尾。对于 ClickHouse Cloud 用户,请在 jdbcUrl 中添加 ssl=true&sslmode=NONE。
clickHouseUsername 用于身份验证的 ClickHouse 用户名。 ✅
clickHousePassword 用于身份验证的 ClickHouse 密码。 ✅
clickHouseTable 用于插入数据的目标 ClickHouse 表。 ✅
maxInsertBlockSize 插入时的最大块大小;如果插入用的块由我们控制创建,则使用此参数 (ClickHouseIO 选项) 。 一个 ClickHouseIO 选项。
insertDistributedSync 如果启用此设置,写入 Distributed 表的插入查询会等待数据发送到 cluster 中的所有节点。 (ClickHouseIO 选项) 。 一个 ClickHouseIO 选项。
insertQuorum 对于 Replicated 表中的 INSERT 查询,等待写入到指定数量的副本,并将数据追加线性化。0 - 禁用。 一个 ClickHouseIO 选项。此设置在默认服务器设置中处于禁用状态。
insertDeduplicate 对于 Replicated 表中的 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>。除非 useLegacySql 为 true,否则默认使用 GoogleSQL。 必须指定 inputTableSpec 或 query 之一。如果同时设置这两个参数,Template将使用 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。

源表和目标表的 schema

为了高效地将 BigQuery 数据集加载到 ClickHouse 中,管道会执行列推断过程,分为以下几个阶段:

  1. 模板基于目标 ClickHouse 表构建 schema 对象。
  2. 模板遍历 BigQuery 数据集,并尝试根据列名进行匹配。

数据类型映射

BigQuery 类型会根据你的 ClickHouse 表定义进行转换。因此,上表列出了你的目标 ClickHouse 表中建议采用的映射 (针对给定的 BigQuery 表/查询) :

BigQuery 类型 ClickHouse 类型 备注
Array 类型 Array 类型 内部类型必须是此表中列出的受支持基本类型之一。
Boolean 类型 Bool 类型
Date 类型 Date 类型
Datetime 类型 Datetime 类型 同样也适用于 Enum8、Enum16 和 FixedString。
String 类型 String 类型 在 BigQuery 中,所有 Int 类型 (INT、SMALLINT、INTEGER、BIGINT、TINYINT、BYTEINT) 都是 INT64 的别名。我们建议你在 ClickHouse 中设置合适的整数位宽,因为模板会根据已定义的列类型 (Int8、Int16、Int32、Int64) 转换该列。
Numeric - Integer 类型 Integer 类型 在 BigQuery 中,所有 Int 类型 (INT、SMALLINT、INTEGER、BIGINT、TINYINT、BYTEINT) 都是 INT64 的别名。我们建议你在 ClickHouse 中设置合适的整数位宽,因为模板会根据已定义的列类型 (Int8、Int16、Int32、Int64) 转换该列。如果 ClickHouse 表中使用了未明确指定的 Int 类型 (UInt8、UInt16、UInt32、UInt64) ,模板也会进行转换。
Numeric - Float 类型 Float 类型 支持的 ClickHouse 类型:Float32 和 Float64

运行Template

BigQuery 到 ClickHouse 的Template可通过 Google Cloud CLI 运行。

登录 Google Cloud Console 并搜索 DataFlow。

  1. 点击 CREATE JOB FROM TEMPLATE 按钮
    DataFlow 控制台
  2. 打开Template表单后,输入作业名称并选择所需区域。
    DataFlow Template初始表单
  3. 在 DataFlow Template 输入框中,输入 ClickHouse 或 BigQuery,然后选择 BigQuery to ClickHouse Template
    选择 BigQuery 到 ClickHouse Template
  4. 选中后,表单会展开,以便你填写更多详细信息:
    • ClickHouse server JDBC URL,格式如下:jdbc:clickhouse://host:port/schema。
    • ClickHouse 用户名。
    • ClickHouse 目标表名称。

BigQuery 到 ClickHouse 扩展Template表单
  1. 根据Template参数部分中的详细说明,自定义并添加任何与 BigQuery/ClickHouseIO 相关的配置

监控作业

前往 Google Cloud Console 中的 Dataflow Jobs 选项卡,查看该作业的状态。你可以在这里找到作业的详细信息,包括进度以及任何错误:

DataFlow 控制台显示一个正在运行的从 BigQuery 到 ClickHouse 的作业

故障排查

超出内存限制 (总量) 错误 (代码 241)

当 ClickHouse 在处理大批次数据时内存耗尽,就会出现此错误。要解决此问题:

  • 增加实例资源:将 ClickHouse server 升级到内存更大的更高规格实例,以承载数据处理负载。
  • 减小批次大小:调整 Dataflow 作业配置中的批次大小,向 ClickHouse 发送更小的数据块,从而降低每个批次的内存消耗。这些更改有助于在数据摄取期间平衡资源使用。

Template 源代码

该 Template 的源代码可在以下位置查看:

Navigation