2016-01-07 64 views
3

有没有办法仅对特定GROUP BY列而不是所有GROUP BY列执行汇总聚合?而不是SELECT a,b,SUM(c) FROM sample.data GROUP BY a,bSELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b),我试图实现SELECT a,b,SUM(c) FROM sample.data GROUP BY a, ROLLUP(b)。这在BigQuery中可行吗?Bigquery中的部分汇总聚合

我现在想象得到的唯一方法是为每一列创建一个GROUPING列,我不希望将它们卷起来,并将这些列过滤为只有0。但是,尝试此操作时,我得到的错误是Errors encountered during job execution. Resources exceeded during query execution.,如果不包括ROLLUP(),我不会收到该错误。 (即使与​​同样错误。)

想法?

+0

那么我想你首先需要解决你的“资源超过...”问题。这在我看来就像是一个单独的问题,你应该专注于通过事物来呈现你的实际查询。只是建议... –

+0

只有在“GROUP BY”中使用“ROLLUP()”时才会出现“资源超出”错误。没有“ROLLUP()”,查询正常执行。我在5个不同列上的实际查询组只需要在其中一个上滚动。我认为在5个不同的列(而不是1)上滚动的复杂性增加了这个错误,这就是为什么我想知道是否有办法只在一列上滚动 – blah

+0

得到它 - 我被你的陈述困惑了 - “(即使与GROUP EACH BY同样错误)” –

回答

1

我不认为像GROUP BY a, ROLLUP(b)这样的sysntax可用!不是这样!
正如你的情况下,解决方法我会提出下面这样的语法mimicing

因此,假设你有表sample.dataa, b, c, d,你需要模仿

SELECT a, b, c, SUM(d) as s 
FROM table 
GROUP BY a, b, ROLLUP(c) 

下面是ROLLUP少“版本“它的

SELECT a, b, c, s 
FROM (
    SELECT a, b, c, SUM(d) AS s 
    FROM sample.data 
    GROUP BY a, b, c 
), (
    SELECT a, b, NULL AS c, SUM(s) AS s 
    FROM (
    SELECT a, b, c, SUM(d) AS s 
    FROM sample.data 
    GROUP BY a, b, c 
) 
    GROUP BY 1, 2, 3 
) 
ORDER BY a, b, c 
1

MS SQL支持团体喜欢这些:

GROUP BY a, ROLLUP(b, c) 
GROUP BY ROLLUP(a, b), ROLLUP(c, d) 

见第https://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx

谷歌BQ仍然不支持。

您可以使用HAVING子句,像这样:

SELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b) 
HAVING a is not null 

OR

SELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b) 
HAVING GROUPING(a)=0 

这个方案不符合错误解决问题:查询执行过程中的资源超出。

我想,对于汇总,多维数据集和分组集合的全面支持是未来BQ版本的一个很好的特性。