【发布时间】: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
的值的字段名称 -
我正在调查,我会尽快回复您。
-
这几天让我很困惑。我和我的同事想出的一种解决方案是手动重建结构,它可以工作,但它会弄乱列名,这没有帮助。 This solution 一个非常相似的相关问题会起作用,除了这里我们有键值对,这不是这个解决方案所提供的,我只是无法让它与连接一起工作。
-
我正在尝试使用具有类似结构的公共数据集来重现它。这就是为什么我要花一点时间来弄清楚它。我看到你写的例子,确实有点不同,我还在研究中,我会告诉你的。
标签: google-bigquery