如何 JSON_EXTRACT 使用列中的键?
how to JSON_EXTRACT using key from a column?
Bigquery JSON_EXTRACT 函数将字符串作为 return 值的键。是否可以从列中取出字符串?
要处理的 json_string_expr
类似于 {'A': '123', 'B': '456'}
。
我想从列 list
中获取密钥。
Bigquery table 和预期结果如下。
| json_string_expr | list | expected_result
|{'A': '123', 'B': '456'} | A | '123'
|{'A': '789', 'B': '012'} | B | '012'
JSON_EXTRACT(json_string_expr, '$.list')
无法给出预期的结果,因为该函数需要 $.
之后的字符串。
知道如何使用标准 SQL 来 return 预期结果吗?
以下适用于 BigQuery 标准 SQL
遗憾的是,JSONPath 必须是字符串文字或查询参数,因此请参阅下面的解决方法
#standardSQL
SELECT json_string_expr, list,
(SELECT SPLIT(kv, ':')[SAFE_OFFSET(1)]
FROM UNNEST(SPLIT(REGEXP_REPLACE(json_string_expr, r"[{} ']", ''))) kv
WHERE SPLIT(kv, ':')[SAFE_OFFSET(0)] = list
) value
FROM `project.dataset.table`
另一个更简洁的版本是
#standardSQL
SELECT json_string_expr, list,
REGEXP_EXTRACT(json_string_expr, CONCAT(r"'", list, "': '(.*?)'")) value
FROM `project.dataset.table`
如果将上述两个版本应用于您问题中的样本数据 - 结果是
Row json_string_expr list value
1 {'A': '123', 'B': '456'} A 123
2 {'A': '789', 'B': '012'} B 012
Bigquery JSON_EXTRACT 函数将字符串作为 return 值的键。是否可以从列中取出字符串?
要处理的 json_string_expr
类似于 {'A': '123', 'B': '456'}
。
我想从列 list
中获取密钥。
Bigquery table 和预期结果如下。
| json_string_expr | list | expected_result
|{'A': '123', 'B': '456'} | A | '123'
|{'A': '789', 'B': '012'} | B | '012'
JSON_EXTRACT(json_string_expr, '$.list')
无法给出预期的结果,因为该函数需要 $.
之后的字符串。
知道如何使用标准 SQL 来 return 预期结果吗?
以下适用于 BigQuery 标准 SQL
遗憾的是,JSONPath 必须是字符串文字或查询参数,因此请参阅下面的解决方法
#standardSQL
SELECT json_string_expr, list,
(SELECT SPLIT(kv, ':')[SAFE_OFFSET(1)]
FROM UNNEST(SPLIT(REGEXP_REPLACE(json_string_expr, r"[{} ']", ''))) kv
WHERE SPLIT(kv, ':')[SAFE_OFFSET(0)] = list
) value
FROM `project.dataset.table`
另一个更简洁的版本是
#standardSQL
SELECT json_string_expr, list,
REGEXP_EXTRACT(json_string_expr, CONCAT(r"'", list, "': '(.*?)'")) value
FROM `project.dataset.table`
如果将上述两个版本应用于您问题中的样本数据 - 结果是
Row json_string_expr list value
1 {'A': '123', 'B': '456'} A 123
2 {'A': '789', 'B': '012'} B 012