【问题标题】:How do I update a nested record in BigQuery using DML syntax?如何使用 DML 语法更新 BigQuery 中的嵌套记录?
【发布时间】:2017-05-29 01:32:08
【问题描述】:

我有以下 BigQuery 架构,我正在尝试更新 event_dim.date 字段:

我使用标准 SQL 和新的 BigQuery DML 尝试了以下查询:

UPDATE `sara-bigquery.examples.app_events_20170113`
SET event_dim.date = '20170113'
WHERE true

但是得到了这个错误:

Error: Cannot access field date on a value with type ARRAY<STRUCT<name STRING, params ARRAY<STRUCT<key STRING, 
value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, ...>>>, timestamp_micros INT64, ...>> at [2:15]

我可以使用此查询选择嵌套字段:

 SELECT x.date FROM `sara-bigquery.examples.app_events_20170113`,
 UNNEST(event_dim) x

但无法找出正确的UPDATE 语法。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    该查询失败,因为event_dim 是一个结构数组。这应该可以解决问题:

    UPDATE `sara-bigquery.examples.app_events_20170113`
    SET event_dim = ARRAY(
      SELECT AS STRUCT * REPLACE('20170113' AS date) FROM UNNEST(event_dim)
    )
    WHERE true
    

    查看docs,了解如何在标准 SQL 中处理数组以获取更多详细信息。

    【讨论】:

    • 请注意,您需要使用反引号对表名进行转义,因为它包含-
    • 感谢@ElliottBrossard,已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2021-12-04
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多