【问题标题】:BigQuery DML on column partitioned tables with streaming buffer具有流式缓冲区的列分区表上的 BigQuery DML
【发布时间】:2019-05-02 04:20:31
【问题描述】:

据我了解,如果查询未触及流缓冲区中的任何记录,则在具有流缓冲区的分区表上进行更新和删除 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 语句中的流式缓冲区数据?

【问题讨论】:

    标签: google-cloud-platform google-bigquery


    【解决方案1】:

    目前您可以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 尚不支持此功能,也不知道何时支持。

    【讨论】:

    • 问题是从此类表中删除数据 - 似乎无法忽略流缓冲区中的记录。
    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2018-10-25
    • 2017-08-22
    • 2022-11-11
    相关资源
    最近更新 更多