Bigquery 中的部分汇总聚合
Partial Rolled Up Aggregations in Bigquery
有没有办法只对某些 GROUP BY
列而不是所有 GROUP BY
列进行汇总聚合?而不是 SELECT a,b,SUM(c) FROM sample.data GROUP BY a,b
或 SELECT 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.data
和 a, 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.
中的某些功能,这并不是很好
有没有办法只对某些 GROUP BY
列而不是所有 GROUP BY
列进行汇总聚合?而不是 SELECT a,b,SUM(c) FROM sample.data GROUP BY a,b
或 SELECT 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.data
和 a, 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.
中的某些功能,这并不是很好