Bigquery:是不是有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值?
Posted
技术标签:
【中文标题】Bigquery:是不是有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值?【英文标题】:Bigquery: Is there a json path way to extract only values from a json array with dynamic keys?Bigquery:是否有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值? 【发布时间】:2021-11-01 09:01:04 【问题描述】:规格如下。
字段值为json数组。 每个 json 元素都有一个动态键。 提取数组的所有值[示例]
WITH TempTable AS
(SELECT '1' as id, '["1_03":8,"1_04":8]' as target UNION ALL
SELECT '2', '["1_19":8,"1_08":9]' UNION ALL
SELECT '3', '["1_23":4,"1_24":6]'
)
SELECT
id,
json_query_array(target,'$'),
REGEXP_EXTRACT_ALL(target, '"(.*?)":') as key,
REGEXP_EXTRACT_ALL(target, ':([0-9]+)') as val
FROM TempTable
对于带有json数组的字段(在示例中),我只能用正则表达式提取值。
但是,有没有办法应用json路径方法?
【问题讨论】:
只提取一个值是什么意思?在您的示例中,您似乎正在提取数组的所有值。 @DanielZagales 你说的是对的。文本内容已明确修改。 (提取数组的所有值) 【参考方案1】:考虑以下方法
SELECT id, element,
kv[OFFSET(0)] as key,
kv[OFFSET(1)] as value
FROM TempTable,
UNNEST(JSON_EXTRACT_ARRAY(target)) element,
UNNEST([STRUCT(SPLIT(TRANSLATE(element, '"', ''), ':') as kv)])
如果应用于您问题中的样本数据 - 输出是
如果您想保留行 - 请使用以下版本
SELECT id, ARRAY(
SELECT AS STRUCT
element,
kv[OFFSET(0)] as key,
kv[OFFSET(1)] as value,
FROM UNNEST(JSON_EXTRACT_ARRAY(target)) element,
UNNEST([STRUCT(SPLIT(TRANSLATE(element, '"', ''), ':') as kv)])
) AS output
FROM TempTable
在这种情况下 - 输出是
【讨论】:
非常有帮助。我很感激。以上是关于Bigquery:是不是有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值?的主要内容,如果未能解决你的问题,请参考以下文章
将 csv 数据发布/订阅到 Dataflow 到 BigQuery