BigQuery更新结构体字段报错:Update set不支持[]修改数组
解决BigQuery数组结构体字段更新报错问题
你遇到的Update set does not support array modification with []错误,是因为BigQuery不允许直接通过数组下标修改数组内的结构体字段,必须通过重构整个数组的方式实现更新。
针对你的需求,正确的SQL写法如下:
UPDATE `mytablelocation` SET event_params = ARRAY( SELECT CASE WHEN key = 'email' AND OFFSET = 0 THEN STRUCT( key AS key, STRUCT(SHA256(value.string_value) AS string_value) AS value ) ELSE event_param END FROM UNNEST(event_params) AS event_param WITH OFFSET ) WHERE event_name = 'purchase' AND EXISTS( SELECT 1 FROM UNNEST(event_params) WHERE key = 'email' AND OFFSET = 0 )
代码说明:
- 用
UNNEST(event_params) WITH OFFSET把数组拆分为单个结构体元素和对应的下标位置 - 通过
CASE判断:如果是下标为0且key为email的元素,就生成新的结构体,将value.string_value替换为SHA256哈希值;其他元素保持原样 - 最后用
ARRAY()将处理后的元素重新组合成数组,赋值给原event_params字段 - WHERE子句里用
EXISTS判断数组中存在目标元素,避免不必要的更新操作
内容的提问来源于stack exchange,提问作者LAURA CECÍLIA
相关产品推荐
相关产品推荐

