跳到主要内容
跳到主要内容

Dataflow BigQuery 到 ClickHouse 模板

BigQuery 到 ClickHouse 模板是一个批处理管道,将数据从 BigQuery 表导入 ClickHouse 表。 该模板可以读取整个表或使用提供的查询读取特定记录。

管道要求

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

模板参数



参数名称参数描述必需备注
jdbcUrlClickHouse 的 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如果启用设置,插入查询到分布式等待,直到数据发送到集群中的所有节点。(ClickHouseIO 选项)。一个 ClickHouseIO 选项。
insertQuorum对于复制表中的 INSERT 查询,等待为指定数量的副本写入并线性化数据的添加。0 - 禁用。一个 ClickHouseIO 选项。该设置在默认服务器设置中禁用。
insertDeduplicate对于复制表中的 INSERT 查询,指定应执行插入块的去重。一个 ClickHouseIO 选项。
maxRetries每次插入的最大重试次数。一个 ClickHouseIO 选项。
InputTableSpec要读取的 BigQuery 表。指定 inputTableSpecquery 之一。当两者都设置时,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。必须指定 inputTableSpecquery 之一。如果设置了两个参数,则模板使用 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,并进行列感染过程,进行了以下阶段:

  1. 模板基于目标 ClickHouse 表构建模式对象。
  2. 模板迭代 BigQuery 数据集,并尝试根据它们的名称匹配列。

信息

需要说明的是,您的 BigQuery 数据集(表或查询)必须与 ClickHouse 目标表具有完全相同的列名。

数据类型映射

BigQuery 类型根据您的 ClickHouse 表定义进行转换。因此,上表列出了您应该在目标 ClickHouse 表中具有的推荐映射(针对给定的 BigQuery 表/查询):

BigQuery 类型ClickHouse 类型备注
数组类型数组类型内部类型必须是此表中列出的支持的基本数据类型之一。
布尔类型布尔类型
日期类型日期类型
日期时间类型日期时间类型也适用于 Enum8Enum16FixedString
字符串类型字符串类型在 BigQuery 中,所有整数类型(INTSMALLINTINTEGERBIGINTTINYINTBYTEINT)都是 INT64 的别名。我们建议您在 ClickHouse 中设置正确的整数大小,因为模板会根据定义的列类型(Int8Int16Int32Int64)转换列。
数字 - 整数类型整数类型在 BigQuery 中,所有整数类型(INTSMALLINTINTEGERBIGINTTINYINTBYTEINT)都是 INT64 的别名。我们建议您在 ClickHouse 中设置正确的整数大小,因为模板会根据定义的列类型(Int8Int16Int32Int64)转换列。模板还将转换在 ClickHouse 表中使用的未分配整数类型(UInt8UInt16UInt32UInt64)。
数字 - 浮点类型浮点类型支持的 ClickHouse 类型:Float32Float64

运行模板

BigQuery 到 ClickHouse 模板可以通过 Google Cloud CLI 执行。

备注

请务必查看本文档,特别是上述部分,以充分了解模板的配置要求和前提条件。

安装和配置 gcloud CLI

  • 如果尚未安装,请安装 gcloud CLI
  • 请遵循 本指南 中的 开始之前 部分,以设置运行 DataFlow 模板所需的配置、设置和权限。

运行命令

使用 gcloud dataflow flex-template run 命令运行使用 Flex 模板的 Dataflow 作业。

以下是命令的示例:

命令分解

  • 作业名称: run 关键字后面的文本是唯一的作业名称。
  • 模板文件:--template-file-gcs-location 指定的 JSON 文件定义模板结构以及接受的参数的详细信息。提及的文件路径是公开的,可以使用。
  • 参数: 参数用逗号分隔。对于基于字符串的参数,使用双引号将值括起来。

预期响应

运行命令后,您应该会看到类似于以下的响应:

监控作业

在 Google Cloud 控制台中导航到 Dataflow 作业选项卡 以监控作业的状态。您将找到作业的详细信息,包括进度和错误:

DataFlow 正在运行��的作业

故障排除

代码:241. DB::Exception: 内存限制(总计)超出

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

  • 增加实例资源:将您的 ClickHouse 服务器升级到具有更多内存的大型实例,以处理数据处理负载。
  • 减少批量大小:在您的 Dataflow 作业配置中调整批量大小,将较小的数据块发送到 ClickHouse,从而减少每个批次的内存消耗。 这些更改可能有助于在数据摄取期间平衡资源使用。

模板源代码

模板的源代码可以在 ClickHouse 的 DataflowTemplates 分支中找到。