如何从具有字典列表的表中查询,仅针对某些键 (BigQuery) SQL
Posted
技术标签:
【中文标题】如何从具有字典列表的表中查询,仅针对某些键 (BigQuery) SQL【英文标题】:How to query from a table with a list of dictionaries, only for certain keys (BigQuery) SQL 【发布时间】:2021-10-21 00:09:29 【问题描述】:我在 Google BigQuery 上有一个表,其中 每一行 都有一个名为“customized_field”的字段,该字段是一个包含 25 个字典列表的字典(每个字典只有 1 个键/值对)。每行都有一个相同的字典(具有相同的“id”名称),只是“值”中的数量不同。字典是这样的:
[
"customized_field": [
"data":
"id": "Bob",
"value": 3
,
"data":
"id": "Jim",
"value": 4
,
"data":
"id": "Mary",
"value": 2
,
etc etc... (22 more)
]
我想创建一个创建两列(特别是“Bob”和“Mary”)的表,其中两列中的每一列的值都是字典中的“值”。所以表格看起来像这样:
Bob | Mary |
---|---|
3 | 2 |
4 (say this is the value in the next row) | 5 (say this is the value in the next row) |
我的 SQL 脚本如下所示:
SELECT
CASE when h.data.id = "Bob" then h.value.value end Bob,
CASE when h.data.id = "Mary" then h.value.value end Mary
FROM `my_database`, UNNEST(`my_database `. customized_field) AS h
但是,这给了我一个看起来我想要的表格,但它创建的行数是我需要的 25 倍(我相信它会重复,因为有 25 个键值对,当我执行“unnest”时,它基本上会创建一吨更多的行)。 我如何获得它以使其不会重复?
我的查询给出了这样的表格:
Bob | Mary |
---|---|
3 | 2 |
4 | 5 |
3 | 2 |
4 | 5 |
3 | 2 |
4 | 5 |
等等等等。
【问题讨论】:
【参考方案1】:考虑以下方法
select * except(key) from (
select h.data.id, h.data.value, to_json_string(t) key
from `my_database` t, unnest(t.customized_field) AS h
)
pivot (max(value) for id in ('Bob', 'Mary'))
输出如下所示
【讨论】:
以上是关于如何从具有字典列表的表中查询,仅针对某些键 (BigQuery) SQL的主要内容,如果未能解决你的问题,请参考以下文章