我将
change stream
数据从 Spanner 传输到 Big Query 中。我使用默认的 --template-file-gcs-location=gs://dataflow-templates-us-central1/latest/flex/Spanner_Change_Streams_to_BigQuery
Flex 模板。
Spanner_Change_Streams_to_BigQuery
模板使用 Splittable DoFunc 我无法耗尽不确定这是如何以及是否是正确的方法。当我必须传播架构更改时,是否有更简单的方法来防止任何数据丢失?
我考虑使用
const result = await dataflow.projects.jobs.getMetrics(request);
来获取所有水印,但最终我得到了模板的每个阶段的多个水印。
这是正确的做法吗?如果是这样,我如何启动一个具有多个阶段、基于多个水印的新 Flex 模板?
DataWatermark F174 1697517770000000
{
name: {
origin: 'dataflow/v1b3',
name: 'DataWatermark',
context: { execution_step: 'F174' }
},
scalar: 1697517770000000,
updateTime: '2023-10-17T04:43:06.711Z'
}
DataWatermark F174 1697517770000000
{
name: {
origin: 'dataflow/v1b3',
name: 'DataWatermark',
context: { execution_step: 'F175', tentative: 'true' }
},
scalar: 1697517770000000,
updateTime: '2023-10-17T04:43:06.711Z'
}
DataWatermark F175 1697517770000000
{
name: {
origin: 'dataflow/v1b3',
name: 'DataWatermark',
context: { execution_step: 'F175' }
},
scalar: 1697517770000000,
updateTime: '2023-10-17T04:43:06.711Z'
}
DataWatermark F175 1697517770000000
事实证明,我的设置太复杂,无法正确理解幕后发生的事情。
关键见解。 Spanner 架构更改不会自动传播到 BigQuery,但如果在更改 Spanner 之前对 BQ 架构进行更改,则不会丢失数据:
操作顺序:
add column
语句use_runner_v2
和 streaming
)# I use these parameters in my `gcloud dataflow flex-template run` command
...
experiments=use_runner_v2,\
enableStreamingEngine=true,\
...
add_column
更改