Bigquery 为其余数据输出带有 json 数组对象的不同 zip 行
Posted
技术标签:
【中文标题】Bigquery 为其余数据输出带有 json 数组对象的不同 zip 行【英文标题】:Bigquery output distinct zip rows with json array object for rest of data 【发布时间】:2020-05-13 20:25:24 【问题描述】:我正在尝试构建一个 bigquery 查询以使每行具有唯一的邮政编码。 json 对象中的其余数据为:
-
一个数组对象
不复制状态
一个州的多个城市与其所属的州在同一个对象中分组
多个州/城市组合是数组中的单独对象
我尝试了很多方法,但都无法获得输出。
示例表
zip state city
100 NY city1
100 NY city2
101 NY city3
101 NJ city4
101 NJ city5
... ... ...
输出
zip zip_data
100 "set":["state":["NY"],"city":["city1","city2"]]
101 "set":["state":["NY"],"city":["city3"],"state":["NJ"],"city":["city4","city5"]]
...
【问题讨论】:
BigTable 还是 BigQuery?这些是非常不同的系统。 大查询。是一个错字。 【参考方案1】:以下是 BigQuery 标准 SQL
#standardSQL
SELECT zip, TO_JSON_STRING(STRUCT(`set`)) zip_data
FROM (
SELECT zip, ARRAY_AGG(STRUCT(state, city)) `set`
FROM (
SELECT zip, state, ARRAY_AGG(DISTINCT city) city
FROM `project.dataset.table`
GROUP BY zip, state
)
GROUP BY zip
)
如果将上面应用于您的问题中的样本数据,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 100 zip, 'NY' state, 'city1' city UNION ALL
SELECT 100, 'NY', 'city2' UNION ALL
SELECT 101, 'NY', 'city3' UNION ALL
SELECT 101, 'NJ', 'city4' UNION ALL
SELECT 101, 'NJ', 'city5'
)
SELECT zip, TO_JSON_STRING(STRUCT(`set`)) zip_data
FROM (
SELECT zip, ARRAY_AGG(STRUCT(state, city)) `set`
FROM (
SELECT zip, state, ARRAY_AGG(DISTINCT city) city
FROM `project.dataset.table`
GROUP BY zip, state
)
GROUP BY zip
)
输出将是
Row zip zip_data
1 100 "set":["state":"NY","city":["city1","city2"]]
2 101 "set":["state":"NY","city":["city3"],"state":"NJ","city":["city4","city5"]]
【讨论】:
非常感谢。这很完美。花了几天的时间来解决这个问题,但无法找出正确的查询。欣赏它。 当然。我们随时为您提供帮助!以上是关于Bigquery 为其余数据输出带有 json 数组对象的不同 zip 行的主要内容,如果未能解决你的问题,请参考以下文章
使用 Nifi 将带有数组的 json 插入 BigQuery 的问题
通过 Google BigQuery API 将查询结果导出为 JSON