从同时写入的表中读取扳手数据

时间:2018-12-17 12:51:11

标签: google-cloud-platform google-bigquery google-cloud-dataflow apache-beam google-cloud-spanner

我正在通过数据流作业将Spanner数据复制到BigQuery。该作业计划每15分钟运行一次。问题是,如果从同时写入的Spanner表中读取数据,则某些记录在复制到BigQuery时会丢失。

我在读取Spanner数据时正在使用readOnlyTransaction()。我在进行此活动时还必须采取其他预防措施吗?

2 个答案:

答案 0 :(得分:3)

建议使用Cloud Spanner提交时间戳来填充诸如update_date之类的列。提交时间戳允许应用程序确定突变的确切顺序。

使用update_date的提交时间戳并指定确切的时间戳读取,Dataflow作业将能够找到自上次运行以来所有已写入/已提交的现有记录。

https://cloud.google.com/spanner/docs/commit-timestamp

https://cloud.google.com/spanner/docs/timestamp-bounds

答案 1 :(得分:0)

  

如果从同时写入的Spanner表中读取数据,则某些记录在复制到BigQuery时会丢失

这是交易的工作方式。它们在创建事务时显示数据库的“快照视图”,因此将不包含在 之后写入此快照的任何行。

@rose-liu mentioned一样,在行上使用提交时间戳记,并跟踪上一次导出时的时间戳记(可从ReadOnlyTransaction object)获得),可以使您准确地选择'自上次导出以来的新行/更新行