【问题标题】:Inserting into Bigquery table with array of arrays使用数组数组插入 Bigquery 表
【发布时间】: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

标签: google-bigquery bigquery-standard-sql


【解决方案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

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 2015-05-18
    • 2019-03-02
    • 2015-04-18
    • 1970-01-01
    • 2022-01-22
    • 2015-07-04
    • 2021-01-12
    相关资源
    最近更新 更多