【问题标题】:When does BigQuery flush the streaming output bufferBigQuery 何时刷新流式输出缓冲区
【发布时间】:2018-10-25 11:32:00
【问题描述】:

我知道不久前有人以不同的形式提出过这个问题。但是现在 BQ 允许对分区表进行 DML,更重要的是要了解何时刷新流缓冲区,以便我们可以对表执行 DML 以进行维护。

这是非常重要的,因为

  • 我有 1500 个分区表。
  • 每个表至少有 200 个 分区。

现在我必须更新所有表,因为我们正在为 GDPR 执行某种散列。

如果我无法运行 DML,那么 我必须通过加入参考表来重述 200 * 1500 分区。

如果我可以运行 DML,那么我只需运行 1500 条 udpate 语句。

我已停止流式传输,并且已经等待 > 90 分钟,但由于表具有流式缓冲区,我仍然遇到无法运行 DML 的相同错误。任何有您自己经验的回应将不胜感激。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    显然,BigQuery 现在允许更新具有流式缓冲区的分区表的旧分区。但不在流缓冲区本身上。

    例如:

    update 
      `dataset.table_name` 
    set column = 'value' 
    where _PARTITIONTIME = '2018-05-01' 
    

    效果很好。

    但是

    update 
      `dataset.table_name` 
    set column = 'value' 
    where _PARTITIONTIME is null 
    

    不起作用并失败并出现以下错误:

    dataset.table_name 上的 UPDATE 或 DELETE 语句会影响流缓冲区中的行,这是不受支持的

    【讨论】:

    • 无法区分这两个sn-ps
    • 第一个在分区“20180501”上将列设置为“值”,而第二个 sn-p 尝试在流缓冲区上将列设置为“值”。
    【解决方案2】:

    答案是“视情况而定”,主要取决于您流式传输到缓冲区的数据大小 - 但它也基于 BQ 端的算法调整。截至目前 - 在数据刷新之前,您无法以某种方式计算出明确的时间。并且没有手动调用缓冲区刷新的机制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 2022-10-02
      • 2021-12-22
      • 2018-04-17
      相关资源
      最近更新 更多