【问题标题】:UPDATE Repeated Record value in BigQuery更新 BigQuery 中的重复记录值
【发布时间】:2020-03-10 07:21:48
【问题描述】:

我想从 BigQuery 分析事件表中的重复记录更新单个值。

我尝试过以下link 并尝试编写查询:


UPDATE `analytics_1212191.events_2020*`
SET event_params = ARRAY(
  SELECT AS STRUCT
  b.key,
  b.value.string_value,
  b.value.float_value,
  b.value.int_value,
  b.value.double_value
  FROM UNNEST(event_params) as b

)

我想更新具有 key = "xyz" 的 b.value.string_value。我知道目前还没有“where”条款。但上述查询(即使在上述阶段)显示以下错误:

Value of type 
ARRAY<STRUCT<key STRING, string_value STRING, float_value FLOAT64, ...>> 
cannot be assigned to event_params, which has type 
ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, ...>>> at [4:20]

感谢 Felipe 的回答,解决了上述问题后,我可以对 Update 使用以下查询。

如果有人有更好的想法或帮助未来的观众,我想我应该提到结果查询:

 UPDATE `analytics.events_test`
 SET event_params = ARRAY(
   SELECT AS STRUCT
   b.key,
   STRUCT (
     CASE WHEN b.key = "type" and b.value.string_value = "xyz" THEN "abc" ELSE b.value.string_value END,
     b.value.int_value,
     b.value.float_value,
     b.value.double_value
   ) AS value
   FROM UNNEST(event_params) as b
 )
 WHERE  event_name = "app_update" 

一个指针:

计划是在事件表上运行它,并且不支持在分区表中使用通配符的 DML 语句

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    查看错误消息,您缺少一个 STRUCT:

    UPDATE `analytics_1212191.events_2020*`
    SET event_params = ARRAY(
      SELECT AS STRUCT
      b.key,
      STRUCT (
        b.value.string_value,
        b.value.int_value,
        b.value.float_value,
        b.value.double_value
      ) AS value
      FROM UNNEST(event_params) as b
    )
    

    【讨论】:

    • 嗨,Felipe,是的,就是这样。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2022-12-10
    • 2021-06-19
    • 2013-12-05
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多