Bigquery 中的部分汇总聚合

Partial Rolled Up Aggregations in Bigquery

有没有办法只对某些 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 中可行吗?

我现在能想到的唯一方法是为我不希望汇总的每个列创建一个 GROUPING 列,然后将这些列过滤为仅 0。但是,在尝试此操作时,我收到错误 Errors encountered during job execution. Resources exceeded during query execution.,而当不包含 ROLLUP() 时我不会收到该错误。 (即使 GROUP EACH BY 也有同样的错误。)

想法?

我认为 GROUP BY a, ROLLUP(b) 之类的 sysntax 不可用!不是!
正如您的情况的解决方法一样,我建议在下面模仿这种语法

因此,假设您有 table sample.dataa, b, c, d,并且您需要模仿

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

下面是 ROLLUP-less "version" :

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

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

GoogleBQ还是不支持

您可以使用 HAVING 子句,如下所示:

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

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

此解决方案无法解决 错误的问题:查询执行期间超出资源。

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

RollUp 在旧版 SQL (https://cloud.google.com/bigquery/docs/reference/legacy-sql#groupby) 中可用的 Bigquery 上,如果您还需要使用标准 SQL.

中的某些功能,这并不是很好