如何使用字典列表从 table 查询,仅针对某些键 (BigQuery) SQL
How to query from a table with a list of dictionaries, only for certain keys (BigQuery) SQL
我在 Google BigQuery 上有一个 table,其中 每一行 都有一个名为“customized_field”的字段,它是一个字典25 部词典的列表(每部只有 1 key/value 对)。每行都有一个相同的字典(具有相同的“id”名称),只是“值”中的数量不同。字典看起来像这样:
[
{
"customized_field": [
{
"data": {
"id": "Bob",
"value": 3
}
},
{
"data": {
"id": "Jim",
"value": 4
}
},
{
"data": {
"id": "Mary",
"value": 2
}
},
etc etc... (22 more)
}
]
我想创建一个 table 来创建两列(专门针对“Bob”和“Mary”),其中两列中每一列的值都是字典中的“值”。所以 table 看起来像这样:
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
然而,这给了我一个 table 看起来像我想要的,但它创建了我需要的行数的 25 倍(我相信它重复,因为有 25 个键值对,当我这样做时“unnest”它基本上会创建更多的行)。 我如何获取它以便它不执行此复制操作?
我的查询给出了这样的 table:
Bob
Mary
3
2
4
5
3
2
4
5
3
2
4
5
等等等
考虑以下方法
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'))
输出如下所示
我在 Google BigQuery 上有一个 table,其中 每一行 都有一个名为“customized_field”的字段,它是一个字典25 部词典的列表(每部只有 1 key/value 对)。每行都有一个相同的字典(具有相同的“id”名称),只是“值”中的数量不同。字典看起来像这样:
[
{
"customized_field": [
{
"data": {
"id": "Bob",
"value": 3
}
},
{
"data": {
"id": "Jim",
"value": 4
}
},
{
"data": {
"id": "Mary",
"value": 2
}
},
etc etc... (22 more)
}
]
我想创建一个 table 来创建两列(专门针对“Bob”和“Mary”),其中两列中每一列的值都是字典中的“值”。所以 table 看起来像这样:
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
然而,这给了我一个 table 看起来像我想要的,但它创建了我需要的行数的 25 倍(我相信它重复,因为有 25 个键值对,当我这样做时“unnest”它基本上会创建更多的行)。 我如何获取它以便它不执行此复制操作?
我的查询给出了这样的 table:
Bob | Mary |
---|---|
3 | 2 |
4 | 5 |
3 | 2 |
4 | 5 |
3 | 2 |
4 | 5 |
等等等
考虑以下方法
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'))
输出如下所示