google-bigquery - 根据另一列中的值更新 BigQuery 中的嵌套数组
问题描述
我对 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 是一些任意字符串,我只想用相同的值覆盖它。
基于这里和这里的一些答案,我尝试了以下查询(以及它的各种排列)
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”。我不太确定我做错了什么,我很困惑。
解决方案
以下是 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)
)
推荐阅读
- python - 如何将 Pandas MultiIndex/PeriodIndex 转换为 Dict,同时保持值和周期分开
- reactjs - React-Redux 中的 actionCreator、props 和组件如何连接?
- java - Android - 单元测试以检查按钮单击是否成功
- javascript - 防止在jquery中重复值
- sql - SQL 错误:ORA-00904:创建表期间标识符无效
- lua - floor(a, b) 和 a // b 的结果不同
- kubernetes - 如何通过 nodeport 启用 Kubernetes 仪表板?
- angular - 将函数转换为可观察的
- php - 第一行数组不更新
- python - 如何从泡菜文件中仅加载选定的对象?