You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive QL转BigQuery SQL报错:UNNEST内不允许使用array_agg

Hive QL转BigQuery SQL的问题修正

原Hive查询

create table d_bu as
select
itapp_id,
it_acronym,
concat_ws(',',sort_array(split(concat_ws(":", collect_set(it_unit)),':'))) as merged_BU,
case when lower(domain) in ('csms','ucmdb') then 'yes' when lower(line_of_business) in ('psbms','retail','hosted') then 'yes' else 'no' end as heritage
from db.table_bkp
group by itapp_id,
it_acronym,
domain,
line_of_business;

错误的BigQuery转换尝试

你给出的转换代码执行时触发错误 Aggregate function array_agg is not allowed under Unnest,错误代码如下:

CREATE TABLE db.d_bu
 AS
  SELECT
    table_bkp.itapp_id,
    table_bkp.it_acronym,
    array_to_string(ARRAY (
     SELECT
       v
      FROM
       UNNEST(split(array_to_string(array_agg(DISTINCT table_bkp.it_unit), ':'), ':')) AS v
     ORDER BY
      v
    ), ',') AS merged_bu,
    CASE
     WHEN lower(table_bkp.domain) IN(
      'csms', 'ucmdb'
     ) THEN 'yes'
     WHEN lower(table_bkp.line_of_business) IN(
      'psbms', 'retail', 'hosted'
     ) THEN 'yes'
     ELSE 'no'
    END AS heritage
   FROM
    db.table_bkp
   GROUP BY 1, 2, table_bkp.domain, table_bkp.line_of_business
;

错误原因

问题出在嵌套子查询中,你在UNNEST的上下文里直接调用了外层的聚合函数array_agg,BigQuery不允许在这种嵌套子查询中引用未提前计算的聚合结果。原Hive逻辑是先收集去重的it_unit用冒号拼接,拆分后排序再用逗号拼接,其实可以用BigQuery的原生数组函数更简洁实现,无需嵌套子查询。

修正后的BigQuery查询

利用BigQuery的ARRAY_AGG(DISTINCT ...)直接生成去重数组,再用ARRAY_SORT排序,最后通过ARRAY_TO_STRING转成逗号分隔的字符串,完全匹配原Hive逻辑:

CREATE TABLE db.d_bu
AS
SELECT
  itapp_id,
  it_acronym,
  ARRAY_TO_STRING(ARRAY_SORT(ARRAY_AGG(DISTINCT it_unit)), ',') AS merged_bu,
  CASE
    WHEN LOWER(domain) IN ('csms', 'ucmdb') THEN 'yes'
    WHEN LOWER(line_of_business) IN ('psbms', 'retail', 'hosted') THEN 'yes'
    ELSE 'no'
  END AS heritage
FROM db.table_bkp
GROUP BY itapp_id, it_acronym, domain, line_of_business;

这样既避免了嵌套子查询的问题,又简化了代码逻辑,执行效率也更高。

内容的提问来源于stack exchange,提问作者Saurabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:05:22