根据另一列中的值更新 BigQuery 中的嵌套数组
Posted
技术标签:
【中文标题】根据另一列中的值更新 BigQuery 中的嵌套数组【英文标题】:Updating nested array in BigQuery based on value in another column 【发布时间】:2020-01-20 11:18:05 【问题描述】:我对 BigQuery 语法有一个问题,我有点卡住了。我在一个表中有一个条目,它有多个键值对作为数组,当键是某个值时,我想只更新值中的一个特定字符串。
这里是条目
[
"event_params": [
"key": "programType",
"value":
"string_value": "custom",
"int_value": null,
"float_value": null,
"double_value": null
,
"key": "firebase_event_origin",
"value":
"string_value": "app",
"int_value": null,
"float_value": null,
"double_value": null
,
"key": "firebase_screen_id",
"value":
"string_value": null,
"int_value": "5",
"float_value": null,
"double_value": null
,
"key": "programName",
"value":
"string_value": "overwrite_me",
"int_value": null,
"float_value": null,
"double_value": null
]
]
我想保持一切不变,除非“key”=“programName”我想用新字符串“anonymous”覆盖 string_value“overwrite_me”。一般来说, string_value 是一些任意字符串,我只想用相同的值覆盖它。
根据here 和here 的几个答案,我尝试了以下查询(以及它的各种排列)
SET
event_params = ARRAY(
SELECT AS STRUCT * REPLACE(
CASE WHEN event_param.key = 'programName' THEN
((SELECT AS STRUCT value.* REPLACE('anonymous' AS string_value)) AS value)
END
)
FROM UNNEST(event_params) as event_param
)
但 BigQuqery 总是给我语法错误,特别是“语法错误:预期的“)”但在 [9:73] 得到关键字 AS”。我不太确定我做错了什么,我很困惑。
【问题讨论】:
您在使用 SET 方法之前是否声明了您的数组?另外,您遇到了哪些错误? 是的,所有的数组都被声明了。我排除了获取表中所有条目的代码。这些错误是语法错误之间的混合,例如“语法错误:预期的“)”但得到了关键字 AS”,我不太明白为什么语法错误,其他时候(不是上面的代码)我得到“错误: 无法访问类型为 ARRAY以下是 BigQuery 标准 SQL
查看非常您的代码的更正版本
SET
event_params = ARRAY(
SELECT AS STRUCT * REPLACE(
CASE WHEN event_param.key = 'programName' THEN
(SELECT AS STRUCT * REPLACE('anonymous' AS string_value) FROM UNNEST([value]))
ELSE value
END AS value
)
FROM UNNEST(event_params) AS event_param
)
另外,请注意 - 您可以删除对 event_param
的引用,如下例所示
SET
event_params = ARRAY(
SELECT AS STRUCT * REPLACE(
CASE WHEN key = 'programName' THEN
(SELECT AS STRUCT * REPLACE('anonymous' AS string_value) FROM UNNEST([value]))
ELSE value
END AS value
)
FROM UNNEST(event_params)
)
【讨论】:
啊完美!这正是我正在寻找的。非常感谢。以上是关于根据另一列中的值更新 BigQuery 中的嵌套数组的主要内容,如果未能解决你的问题,请参考以下文章