繁体   English   中英

BigQuery:标准SQL中的NEST替代

[英]BigQuery: NEST alternative in Standard SQL

标准SQL中NEST函数的替代方法是什么。 我已经尝试过这里提到的ARRAY_AGG ,但是ARRAY_AGG返回一行,而NEST返回扁平化数组。

旧版SQL:NEST 旧版SQL NEST

标准SQL:ARRAY_AGG ARRAY_AGG标准SQL

我有点惊讶,但是这个查询:

select *
from (select 1 as x),
     (select 2 as x),
     (select 3 as x),
     (select 4 as x),
     (select 5 as x)

返回与此查询完全相同的东西:

select *
from (select 1 as x),
     (select 2 as x),
     (select 3 as x),
     (select 4 as x),
     (select 5 as x);

毫无疑问,问题是缺少group by 因此,我认为一个简单的select *就可以满足您的要求:

select *
from (select 1 as x union all select 2 union all select 3 union all select 4 union all select 5
     ) n

以下是BigQuery:

实际上,标准SQL中的ARRAY_AGG() 等同于旧版SQL中的NEST()
它们都返回一行中的元素数组

不同之处在于用户界面如何显示结果重复字段-对于旧版SQL用户界面,结果将被扁平化,这就是为什么您将其视为“扁平化数组”的原因

您可以通过以下方式进行测试

#legacySQL  
SELECT COUNT(1) rows FROM (
  SELECT NEST(x) y
  FROM (SELECT 1 AS x),
    (SELECT 2 AS x),
    (SELECT 3 AS x),
    (SELECT 4 AS x),
    (SELECT 5 AS x)
)

结果

Row rows     
1   1    

请记住-UI中的扁平化仅发生在大多数外部选择语句中,并且所有内部选择都将NEST视为ARRAYS /重复字段

从将结果保存到表中开始-如果要将以下输出保留为重复字段

#legacySQL  
SELECT NEST(x) y
FROM (SELECT 1 AS x),
  (SELECT 2 AS x),
  (SELECT 3 AS x),
  (SELECT 4 AS x),
  (SELECT 5 AS x)

您需要确保已禁用“ Flatten Results ,并且还需要“ Allow Large Results

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM