我最近一直在尝试为Google的Big Query流API提出一种重试机制,以便通过有时可能仍在Streaming Buffer中的Rows通过UPDATE语句运行DML查询。由于这些行尚未导出到表中,因此BI的api禁止在其上运行UPDATE或DELETE语句。据我了解,您无法自己手动刷新Streaming Buffer。

我的问题是,使用某种重试机制进行调用的方法或方法是否可以在宣布的可能的90分钟等待时间内(行可以在缓冲区中)执行?

最佳答案

我建议将发生流传输的表中的数据复制到另一个可以不受限制地运行DML的表中。可以使用jobs.insert API创建另一个永久表
您需要将此永久表视为真值源,在原始表上可以根据需要和应对频率enable table's expiration timepartition expiration
现在,当您拥有永久表时,您可以对该数据进行其他处理或生成报告等。
上面的缺点是,无论如何您都可能会有一些较晚的数据,您应该获取/复制并将合理的数据窗口重复数据删除到永久表中,以确保最新的数据

我假设流到表的流媒体可以一次又一次地运行,所以从理论上讲,由于流缓冲区永远不会为空,因此您永远无法运行DML。

无论如何,如果您仍然需要运行某些重试机制,请尝试使用类似https://github.com/awaitility/awaitility的方法

关于google-app-engine - 仍在流式缓冲区中的行上的Google BigQuery DML Update查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52491748/

10-16 03:04