如何关联多个 BigQuery 数组字段?

Posted

技术标签:

【中文标题】如何关联多个 BigQuery 数组字段?【英文标题】:How to associate multiple BigQuery array fields? 【发布时间】:2020-04-22 22:54:47 【问题描述】:

我正在处理一个 BigQuery 数据表,该数据表使用多个数组字段来存储同一逻辑记录的元素。

在这种情况下,有一个数组字段用于“产品代码”,第二个数组字段用于“数量”,第三个数组字段用于“价格”。如果元素,所有数组字段都将具有相同的数量。

如何构建将产品代码、数量和价格提取为三列结果集的 BigQuery 查询?

【问题讨论】:

请提供样本数据和预期结果。 【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT id, rec.*
FROM `project.dataset.table`,
UNNEST(ARRAY(    
  SELECT AS STRUCT code, quantity, price
    FROM UNNEST(code) code WITH OFFSET
    JOIN UNNEST(quantity) quantity WITH OFFSET USING(OFFSET)
    JOIN UNNEST(price) price WITH OFFSET USING(OFFSET)  
)) rec

您可以使用示例虚拟数据进行测试,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, ['product1', 'product2', 'product3'] code, [10, 20, 30] quantity, [2.99, 1.99, 0.99] price UNION ALL
  SELECT 2, ['product4', 'product5', 'product6'], [60, 50, 40], [3.99, 4.99, 5.99] 
)
SELECT id, rec.*
FROM `project.dataset.table`,
UNNEST(ARRAY(    
  SELECT AS STRUCT code, quantity, price
    FROM UNNEST(code) code WITH OFFSET
    JOIN UNNEST(quantity) quantity WITH OFFSET USING(OFFSET)
    JOIN UNNEST(price) price WITH OFFSET USING(OFFSET)  
)) rec

有输出

Row id  code        quantity    price    
1   1   product1    10          2.99     
2   1   product2    20          1.99     
3   1   product3    30          0.99     
4   2   product4    60          3.99     
5   2   product5    50          4.99     
6   2   product6    40          5.99     

【讨论】:

以上是关于如何关联多个 BigQuery 数组字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储为字符串的 bigquery 字段中取消嵌套多个数组?

在 Bigquery 中,如何使用标准 Sql 过滤 Struct 数组以匹配 Struct 中的多个字段?

JSON 表架构到 bigquery.TableSchema 用于 BigQuerySink

上个月的最后一天 - BigQuery

如何在BigQuery中创建嵌套字段和数组的数组

如何计算 bigquery 数组字段中元素的频率