BigQuery - JSON_EXTRACT 仅提取第一个条目
Posted
技术标签:
【中文标题】BigQuery - JSON_EXTRACT 仅提取第一个条目【英文标题】:BigQuery - JSON_EXTRACT only extracts first entry 【发布时间】:2020-06-22 13:42:59 【问题描述】:我有一列包含如下的 json 字符串:
["answer":"europe-austria-swiss","text":"Österreich, Schweiz","answer":"europe-italy","text":"Italien","answer":"europe-france","text":"Frankreich"]
我想提取 ONE 列和行中给出的所有答案,用逗号分隔:
europe-austria-swiss, europe-italy, europe-france
我想我尝试了 JSON_EXTRACT 和 JSON_EXTRACT_ARRAY 提供的所有可能性或替换括号和其他符号,但我要么只提取第一个条目(在这种情况下
europe-austria-swiss
) 或者它作为数组拆分为行,我不能再从中提取“答案”的字符串。
有人知道如何解决这个问题吗?非常感谢! 这一列当然是一个更大的表格的一部分(如果无论如何相关的话)。
【问题讨论】:
你的数据结构不清楚。你有 JSON 对象数组吗?还是带有数组的 JSON?同时显示你现在使用的代码。 这是一个包含json对象的json数组。 【参考方案1】:我想我知道发生了什么(如果我错了,请纠正我)。
我最好的猜测是你正在尝试类似的东西:
SELECT JSON_EXTRACT(json_text, "$.answer") AS answers
FROM UNNEST([
'"answer":"europe-austria-swiss","text":"Österreich, Schweiz","answer":"europe-italy","text":"Italien","answer":"europe-france","text":"Frankreich"'
]) as json_text
这会返回:
"europe-austria-swiss"
但是,如果您更改类似这样的基础数据(每行作为一个 json 字符串对象),它应该可以解决问题:
SELECT JSON_EXTRACT(json_text, "$.answer") AS answers
FROM UNNEST([
'"answer":"europe-austria-swiss","text":"Österreich, Schweiz"',
'"answer":"europe-italy","text":"Italien"',
'"answer":"europe-france","text":"Frankreich"'
]) as json_text
结果:
"europe-austria-swiss"
"europe-italy"
"europe-france"
希望这会有所帮助!
【讨论】:
【参考方案2】:以下是 BigQuery 标准 SQL
#standardSQL
SELECT (
SELECT STRING_AGG(JSON_EXTRACT_SCALAR(answer, '$.answer'), ' ,')
FROM UNNEST(JSON_EXTRACT_ARRAY(json_string)) answer
) AS answers
FROM `project.dataset.table`
您可以使用您问题中的示例数据进行测试,如以下示例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT '["answer":"europe-austria-swiss","text":"Österreich, Schweiz","answer":"europe-italy","text":"Italien","answer":"europe-france","text":"Frankreich"]' json_string
)
SELECT (
SELECT STRING_AGG(JSON_EXTRACT_SCALAR(answer, '$.answer'), ' ,')
FROM UNNEST(JSON_EXTRACT_ARRAY(json_string)) answer
) AS answers
FROM `project.dataset.table`
结果
Row answers
1 europe-austria-swiss ,europe-italy ,europe-france
【讨论】:
以上是关于BigQuery - JSON_EXTRACT 仅提取第一个条目的主要内容,如果未能解决你的问题,请参考以下文章
JSON_EXTRACT 不适用于 BigQuery 中的布尔值
BigQuery 中 JSON_EXTRACT 和 JSON_QUERY 的区别
避免 BigQuery 中 JSON_EXTRACT 函数中的指数表示法
将使用 JSON_EXTRACT 的查询从 MySQL 转换为 BigQuery
我想用 BigQuery 提取 Json 格式的数据。 UDF 或 json_extract
如何使用 JSON_EXTRACT 或 JSON_EXTRACT_SCALAR 在 Big Query 中读取多级 JSON 数据