【问题标题】:BigQuery query which returns distinct array union of all arrays where the object ID is the sameBigQuery 查询返回对象 ID 相同的所有数组的不同数组联合
【发布时间】:2021-07-08 17:12:09
【问题描述】:

我想查询 BigQuery,其中返回两列、一个不同的对象 ID 列,以及基于对象 ID 相同的数组值的不同数组值组合。

例如,假设我在 BigQuery 中有这个表:

+-----------+-----------+
| object_id |  array    |
+-----------+-----------+
| a         | 1,2,3,4,5 |
| a         | 2,3,4,5,6 |
| b         | 9,8,7,6   |
+-----------+-----------+

我想运行一个返回以下数据的查询:

+-----------+-------------+
| object_id |  array      |
+-----------+-------------+
| a         | 1,2,3,4,5,6 |
| b         | 9,8,7,6     |
+-----------+-------------+

我认为查询应该与this 类似,但我有点不清楚如何通过数组元素的不同组合获取不同的对象 ID。

【问题讨论】:

    标签: google-bigquery bigdata


    【解决方案1】:

    考虑以下 [slim] 解决方案

    select id, array_agg(distinct el) as arr
    from `project.dataset.table`,
    unnest(arr) el
    group by id  
    

    【讨论】:

      【解决方案2】:

      使用array_concat_agg:

      WITH `project.dataset.table` AS (
        SELECT 'a' id, [1,2,3,4,5] arr UNION ALL
        SELECT 'a', [2,3,4,5,6] UNION ALL
        SELECT 'b', [9,8,7,6]
      )
      SELECT
          id,
          ARRAY(SELECT DISTINCT x FROM UNNEST(concatenated) as x) as a
      FROM (
        SELECT
          id,
          ARRAY_CONCAT_AGG(arr) as concatenated
        FROM `project.dataset.table`
        GROUP BY id
      )
      

      【讨论】:

      • 完美运行!谢谢。
      猜你喜欢
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 2017-07-17
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多