选择查询以使用 BigQuery 对输出 json 中的记录进行分组

Posted

技术标签:

【中文标题】选择查询以使用 BigQuery 对输出 json 中的记录进行分组【英文标题】:Select query to group records in output json using BigQuery 【发布时间】:2020-02-17 18:16:21 【问题描述】:

我在 BigQuery 中有一个日期时间分区表,其架构如下:

timestamp      TIMESTAMP  REQUIRED  
customer_id    STRING     REQUIRED  
plant_id       STRING     REQUIRED  
inverters      RECORD     REPEATED  
inverters. id  STRING     REQUIRED
...

所以,如果我执行SELECT * FROMmy_table`,它会生成一个 JSON 结构如下:

[
  
    "timestamp": "2019-10-20 20:00:00 UTC",
    "customer_id": "5d3f1aee5f70740d54c416e1",
    "plant_id": "5d658cb25f70747626153e83",
    "inverters": [
      
        "id": "5d77e3225f70746ec02bd8e7",
        ...
      ,
      ...
    ]
  ,
  ...
]

这种格式在我的大多数用例中都很好用,除了一个。

所以,如果我想要所有逆变器的 ID,我会这样做

SELECT DISTINCT id 
FROM `my_table`
CROSS JOIN UNNEST(inverters)

但我还需要按逆变器分组的时间戳,但如果我这样做,假设是一个用于按 id 获取时间戳的嵌套查询,例如:

SELECT inverter, timestamp
FROM (
  SELECT DISTINCT id 
  FROM `my_table`
  CROSS JOIN UNNEST(inverters)
) AS inverter, `my_table`

那么生成的 json 将是:

[
  
    "inverter": 
      "id": "5d791a505f70744c233b819d"
    ,
    "timestamp": "2020-01-21 11:15:00 UTC"
  ,
  
    "inverter": 
      "id": "5d791a505f70744c233b819d"
    ,
    "timestamp": "2020-01-21 00:20:00 UTC"
  ,
  
    "inverter": 
      "id": "5d791a505f70744c233b819d"
    ,
    "timestamp": "2020-01-21 04:05:00 UTC"
  ,
  ...
]

现在,这是一个很长的介绍。

问题是:有没有办法查询数据,使查询结果看起来像下面这样?

[
  
    "inverter": 
      "id": "5d791a505f70744c233b819d",
      "timestamp": [
        "2020-01-21 11:15:00 UTC",
        "2020-01-21 00:20:00 UTC",
        "2020-01-21 04:05:00 UTC",
        ...
      ]
    ,
  ...
]

【问题讨论】:

【参考方案1】:

这是你想要的吗?

SELECT inverter.id, ARRAY_AGG(timestamp)
FROM `my_table` t CROSS JOIN
     UNNEST(t.inverters) inverter
GROUP BY inverter.id;

你说SELECT * 返回 JSON。我认为这是您的 API 的功能。使用 BigQuery API 时,您看不到 JSON。

【讨论】:

这几乎正是我所需要的,只是不是使用GROUP BY inverter,而是GROUP BY inverter.id。我不知道ARRAY_AGG函数,谢谢。

以上是关于选择查询以使用 BigQuery 对输出 json 中的记录进行分组的主要内容,如果未能解决你的问题,请参考以下文章

选择/提取 JSON 元素时的高效 BigQuery

需要 SQL 查询帮助以解析 BigQuery 表中的 JSON 数据

如何使用 Google Bigquery 的 Java API 以 Json 形式获取查询结果

Bigquery 为其余数据输出带有 json 数组对象的不同 zip 行

通过 Google BigQuery API 将查询结果导出为 JSON

如何在视图或计划查询之间进行选择,以对通过 Stitch 导入的 BigQuery 表进行重复数据删除?