在BigQuery中使用流缓冲区更新或删除表?

时间:2017-03-29 06:26:25

标签: google-bigquery google-cloud-platform

尝试从通过GCP控制台创建的表中删除记录并使用GCP BigQuery Node.js表插入函数更新时,我收到以下错误。

UPDATE or DELETE DML statements are not supported over table stackdriver-360-150317:my_dataset.users with streaming buffer

创建的表没有流功能。从我在文档Tables that have been written to recently via BigQuery Streaming (tabledata.insertall) cannot be modified using UPDATE or DELETE statements中阅读的内容开始。

这是否意味着一旦使用此函数将记录插入表中,就无法删除记录?什么?如果是这种情况,是否意味着需要删除表并从头开始重新创建?如果不是这样的话。你能否建议一个解决方法来避免这个问题?

谢谢!

2 个答案:

答案 0 :(得分:20)

要检查表是否有流式缓冲区,请检查 override func tableView(_ tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell( withIdentifier: "ChecklistItem", for: indexPath as IndexPath) return cell } 响应中是否有名为tables.get的部分,或者当流式传输到分区表时,流式缓冲区中的数据具有NULL值streamingBuffer伪列,因此即使使用简单的WHERE查询也可以进行检查。

Streamed data可在第一次流式插入表格后的几秒钟内进行实时分析,但最多可能需要90分钟才能进行复制/导出和其他操作。您可能需要等待90分钟,以便所有缓冲区都保留在群集上。您可以使用查询来查看流缓冲区是否为空,或者不像您提到的那样。

如果使用加载作业来创建表,则不会有流缓冲区,但可能会向其传输一些值。

答案 1 :(得分:3)

请确保更改过滤器,以使它们不包括当前流缓冲区中可能包含的数据。

例如,当我向该表流式传输时,此查询失败:

DELETE FROM `project.dataset.table` 
WHERE id LIKE '%-%'

Error: UPDATE or DELETE statement over table project.dataset.table would affect rows in the streaming buffer, which is not supported

您可以通过删除旧记录来解决此问题:

DELETE FROM `project.dataset.table` 
WHERE id LIKE '%-%'
AND ts < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 40 MINUTE)

4282 rows affected.