据我了解,如果查询未触及流缓冲区中的任何记录,则对具有流缓冲区的分区表上的UPDATE和DELETE are working进行操作。否则,将报告以下错误:
UPDATE or DELETE statement over table project.dataset.table would affect rows in the streaming buffer, which is not supported
问题与讨论的this question类似,但是问题与列分区表有关,而不与摄取时分区表有关。
问题是,尽管摄取时间分区可以通过_PARTITIONTIME上的条件在流缓冲区中ignore data,但它不适用于按列分区的表。还有其他方法可以忽略DML语句中的流式缓冲区数据吗?
答案 0 :(得分:0)
目前,您可以only use Legacy SQL获取有关流缓冲区的信息。
像这样从流缓冲区中获取所有数据:
#legacySQL
select MIN(partitioned_tstamp) AS min_tstamp
, MAX(partitioned_tstamp) AS max_tstamp
, COUNT(1) AS lines
FROM [my_dataset_id.mystreaming_data_table$__UNPARTITIONED__]
并获得表中所有分区的摘要,如下所示:
#legacySQL
SELECT *
FROM [my_dataset_id.mystreaming_data_table$__PARTITIONS_SUMMARY__]
我不知道为什么标准SQL尚不支持此功能,或者何时支持。