借助 Datastream,您可以将变更数据从来源直接复制到 BigQuery 表中,以便进行近乎实时的分析。将数据流式传输到 BigQuery 时,您可以选择合并或仅限追加写入模式,并使用 datastream_metadata 列跟踪更改事件。您还可以应用成本管理最佳实践(例如槽预留和表过时调整),并查看已知限制。
写入行为
将数据流式插入 BigQuery 时,事件大小上限为 20 MB。
配置数据流时,您可以选择 Datastream 将变更数据写入 BigQuery 的方式。如需了解详情,请参阅配置写入模式。
表元数据
Datastream 会将名为 datastream_metadata 的 STRUCT 列附加到写入 BigQuery 目标的每个表中。
合并写入模式
如果表在来源中具有主键,则该列包含以下字段:
UUID:此字段的数据类型为STRING。SOURCE_TIMESTAMP:此字段的数据类型为INTEGER。
如果表没有主键,则该列会包含一个额外字段:IS_DELETED。此字段的数据类型为 BOOLEAN,用于指示 Datastream 流式传输到目标位置的数据是否与来源处的 DELETE 操作相关联。没有主键的表只能附加数据。
仅附加写入模式
对于具有和不具有主键的表,datastream_metadata 列包含相同的字段:
UUID:此字段的数据类型为STRING。SOURCE_TIMESTAMP:此字段的数据类型为INTEGER。CHANGE_SEQUENCE_NUMBER:此字段的数据类型为STRING。这是 Datastream 为每个更改事件使用的内部序列号。CHANGE_TYPE:此字段的数据类型为STRING。它表示更改事件的类型:INSERT、UPDATE-INSERT、UPDATE-DELETE或DELETE。SORT_KEYS:此字段包含STRING值的数组。您可以使用这些值对更改事件进行排序。
控制 BigQuery 费用
BigQuery 费用与 Datastream 费用分开收取。如需了解如何控制 BigQuery 费用,请参阅 BigQuery CDC 价格。
费用管理最佳实践
将 Datastream 与 BigQuery 搭配使用作为目标位置时,请考虑以下费用管理最佳实践:
- 了解 BigQuery CDC 费用:将 Datastream 与 BigQuery 搭配用作目标位置时,变更数据捕获 (CDC) 涉及后台合并操作。默认情况下,在没有
BACKGROUND或BACKGROUND_CHANGE_DATA_CAPTUREBigQuery 预留分配的情况下执行的 BigQuery CDC 注入后台作业会使用按需价格。 - 使用 BigQuery 预留:如需管理和限制与 CDC 合并作业相关的费用,我们建议您购买 BigQuery 槽预留。这会以固定价格提供固定容量,使您的费用更可预测。如需了解详情,请参阅配置 BigQuery 预留以用于 CDC 提取。
- 调整
max_staleness:BigQuery 中的max_staleness参数是数据新鲜度与费用之间的直接权衡。值越低,表示合并操作越频繁,费用越高,但数据越新。将此参数调整到满足您对数据新鲜度的业务要求且不超出预算的水平。如需了解详情,请参阅管理表过时性。
已知限制
将 BigQuery 用作目标位置的已知限制包括:
- 默认情况下,Datastream 不支持向已复制到 BigQuery 且没有主键的表添加主键,也不支持从已复制到 BigQuery 且有主键的表中移除主键。如果您需要执行此类更改,请与 Google 支持团队联系。如需了解如何更改已有主键的源表的主键定义,请参阅诊断问题。
BigQuery 中的主键必须属于以下数据类型:
DATEBOOLGEOGRAPHYINT64NUMERICBIGNUMERICSTRINGTIMESTAMPDATETIME
Datastream 不会复制包含不受支持的数据类型的主键的表。
BigQuery 不支持包含
.、$、/、@或+字符的表名称。Datastream 在创建目标表时会将此类字符替换为下划线。例如,源数据库中的
table.name在 BigQuery 中变为table_name。如需详细了解 BigQuery 中的表名称,请参阅表命名。
BigQuery 不支持超过四个聚簇列。复制具有四个以上主键列的表时,Datastream 会使用四个主键列作为聚簇列。
Datastream 会将超出范围的日期和时间字面量(例如 PostgreSQL 无穷大日期类型)映射到以下值:
DATE值为正数,值为9999-12-31DATE值为负,0001-01-01值为TIMESTAMP值为正数,值为9999-12-31 23:59:59.999000 UTCTIMESTAMP值为负,0001-01-01 00:00:00 UTC值为
BigQuery 不支持主键为
FLOAT或REAL数据类型的流式传输表。此类表不会被复制。 如需详细了解 BigQuery 日期类型和范围,请参阅数据类型。如果您的来源是 Salesforce 或 Salesforce Marketing Cloud(预览版),则不支持每个架构的数据集配置选项。