我对Big Query中的 WRITE_TRUNCATE 行为有疑问。
我有一个大的查询表( T1 ),我定期附加日志数据(每个日志行一行)。我希望有一个从该表读取的数据流作业( D1 ),删除任何重复的行并执行其他数据清理操作,然后将其输出到另一个大查询表( T2 ),替换此表中可能已存在的任何数据。我相信我可以通过在数据流作业中使用BigQuery.IO接收器中的WRITE_TRUNCATE write disposition来实现此目的。
问题是,如果我从表 T2 读取另一个数据流作业( D2 ),而作业 D1 正在写入中间截断到此表, D2 看到的数据是什么,即它是否在截断前或截断完成后的状态下查看表。或者它可以在截断期间的任何步骤中看到该表(例如,通过附加新数据的一部分)?
上面链接的javadoc表明截断可能不是是原子的,而REST documentation for Big Query表示它是原子的。
答案 0 :(得分:3)
REST API实际上是这里的真相来源,即BigQuery作业成功完成后, 更改原子。