如何使用字典列表从 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'))     

输出如下所示