使用数组数组插入 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 BY
s。在这里用公共数据重现,以展示如何在 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 的问题
sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu
使用自定义目标接收器将日志导出到 BigQuery(表分区)