使用数组数组插入 Bigquery 表

Posted

技术标签:

【中文标题】使用数组数组插入 Bigquery 表【英文标题】:Inserting into Bigquery table with array of arrays 【发布时间】:2019-09-05 11:49:52 【问题描述】:

如何将记录插入到具有 2 级深度嵌套数组的 BigQuery 表中。

ORDER 表有一个数组 ORDER_DETAIL,其中有一个数组 ORDER_DISCOUNTS。

下面不工作。

INSERT INTO ORDER (ORDER_ID, OrderDetail)
SELECT OH.ORDER_ID, ARRAY_AGG(struct(OD.line_id, OD.item_id, ARRAY_AGG(struct(ODIS.discounttype)) ) 
FROM ORDER_HEADER OH LEFT JOIN ORDER_DETAIL OD, ORDER_DISCOUNTS ODIS 
ON OH.ORDER_ID = OD.ORDER_ID AND ODIS.ORDER_ID = OD.ORDER_ID and ODIS.LINE_ID = OD.LINE_ID 
WHERE OH.ORDER_ID = 'ABCD'

【问题讨论】:

您遇到的错误是什么? 仔细查看了您提供的 SQL 代码(重新格式化),似乎您也想加入 ORDER_DISCOUNTS ODIS 但省略了包含 JOIN 类型和带有字段名称的 ON 子句...“... FROM ORDER_HEADER OH LEFT JOIN ORDER_DETAIL OD, ORDER_DISCOUNTS ODIS ..." 我得到的错误是“在 [1:21] 不允许聚合聚合”。我更改了选择查询并使用如下。 SELECT OH.ORDER_ID, ARRAY_AGG(STRUCT(OD.LINE_ID, OD.ITEM_ID , OD.QUANTITY, ARRAY_AGG(STRUCT(ELIG.LOCATION_ID)))) 从 ORDER_HEADER OH LEFT JOIN ORDER_DETAIL OD on OH.ORDER_ID = OD.ORDER_ID LEFT JOIN ELIG ON elig.ORDER_ID = OD.ORDER_ID 其中 OH.ORDER_ID = 'ABCD' GROUP BY OH.ORDER_ID 【参考方案1】:

我在示例问题中看不到GROUP BYs。在这里用公共数据重现,以展示如何在 BigQuery 中制作数组数组:

WITH data AS (
SELECT *
FROM `fh-bigquery.wikipedia_v3.pageviews_2019` 
JOIN UNNEST(['Andy_K%','Boys%','Catri%']) start
ON title LIKE start
WHERE DATE(datehour) = "2019-09-01" 
AND wiki='en'

)

SELECT start, ARRAY_AGG(STRUCT(title, views) LIMIT 10) title_views
FROM (
  SELECT start, title, ARRAY_AGG(STRUCT(datehour,views) LIMIT 3) views
  FROM data
  GROUP BY start, title
)
GROUP BY start

【讨论】:

以上是关于使用数组数组插入 Bigquery 表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Nifi 将带有数组的 json 插入 BigQuery 的问题

使用不同表中的行“扩展”BigQuery 数组

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

使用自定义目标接收器将日志导出到 BigQuery(表分区)

BigQuery:使用 SQL 从辅助表中查找 ID 数组并连接数据

在 BigQuery SQL 中压缩表数组行