【发布时间】:2019-07-19 18:19:24
【问题描述】:
我有一个表,其中包含一个 string 列,其中包含一个 JSON 对象的字符串化列表,如下所示:
'[{"a": 5, "b": 6}, {"a": 7, "b": 8}]'
我想取消嵌套这个数组,然后使用json_extract() 或json_extract_scalar() 从这些对象中获取值。
BigQuery's JSON Function documentation 不清楚我是否能够使用内置功能做到这一点。
是否需要 UDF 才能完成此操作,或者 BigQuery 中是否存在此功能?
下面的 UDF 完成了我正在寻找的内容:
CREATE TEMP FUNCTION
JSON_EXTRACT_ARRAY(input STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
return JSON.parse(input).map(x => JSON.stringify(x));
""";
with
raw as (
select
1 as id,
'[{"a": 5, "b": 6}, {"a": 7, "b": 8}]' as body
)
select
id,
json_extract(entry, '$.a') as a,
json_extract(entry, '$.b') as b
from
raw,
unnest(json_extract_array(body)) as entry
【问题讨论】:
-
看起来你有解决方案 - 这里的问题是什么?您想要不涉及 UDF 的解决方案吗?或者是其他东西?请澄清-因为我仍然不清楚您突出显示/加粗的任何内容
-
对不起,我以为我的问题很清楚。换种说法:“是否需要 UDF 才能完成此操作,或者 BigQuery 标准 SQL 是否支持取消嵌套字符串化 JSON 数组而不需要 UDF?”
-
我不清楚为什么这个问题被否决而没有提出什么可以使它变得更好的建议。对于遇到此问题的任何人来说,这仍然是一个合法的未决问题,尽管 Felipe Hoffa 的评论确实包含一个链接,如果有人想为其添加投票,则可以跟踪此缺失的功能。
标签: google-bigquery