尝试从通过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
中阅读的内容开始。
这是否意味着一旦使用此函数将记录插入表中,就无法删除记录?什么?如果是这种情况,是否意味着需要删除表并从头开始重新创建?如果不是这样的话。你能否建议一个解决方法来避免这个问题?
谢谢!
答案 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.