我正在通过数据流作业将Spanner数据复制到BigQuery。该作业计划每15分钟运行一次。问题是,如果从同时写入的Spanner表中读取数据,则某些记录在复制到BigQuery时会丢失。
我在读取Spanner数据时正在使用readOnlyTransaction()。我在进行此活动时还必须采取其他预防措施吗?
答案 0 :(得分:3)
建议使用Cloud Spanner提交时间戳来填充诸如update_date
之类的列。提交时间戳允许应用程序确定突变的确切顺序。
使用update_date
的提交时间戳并指定确切的时间戳读取,Dataflow作业将能够找到自上次运行以来所有已写入/已提交的现有记录。
答案 1 :(得分:0)
如果从同时写入的Spanner表中读取数据,则某些记录在复制到BigQuery时会丢失
这是交易的工作方式。它们在创建事务时显示数据库的“快照视图”,因此将不包含在 之后写入此快照的任何行。
与@rose-liu mentioned一样,在行上使用提交时间戳记,并跟踪上一次导出时的时间戳记(可从ReadOnlyTransaction object)获得),可以使您准确地选择'自上次导出以来的新行/更新行