我如何启用“小组”聚合维度作为在BigQuery中创建的函数的输入

发布于 2025-01-31 17:44:40 字数 1089 浏览 2 评论 0原文

例如,我需要在bigquery中以多个不同级别的多个不同级别创建一个表:

SELECT 
dimension_a, 
dimension_b, 
SUM(value) AS value 
FROM mydataset.table 
GROUP BY dimension_a, dimension_b

UNION ALL 

SELECT 
dimension_a, 
NULL AS dimension_b, 
SUM(value) AS value 
FROM mydataset.table 
GROUP BY dimension_a

UNION ALL

SELECT 
NULL AS dimension_a, 
dimension_b, 
SUM(value) AS value 
FROM mydataset.table 
GROUP BY dimension_b

我想这不是最优雅的代码...例如,我有18个不同的聚合维度代码与Union All的代码块18次,我想知道是否有一个函数可以使我可以将聚合维度作为输入?

例如,类似:

CREATE OR REPLACE TABLE FUNCTION mydataset.aggregation_dimension(X type, Y type)
AS
  SELECT
  X as dimension_a, Y as dimension_b,
  SUM(value) AS value
  FROM mydataset.table 
  GROUP BY X, Y;

SELECT * FROM mydataset.aggregation_dimension(dimension_a, dimension_b)
UNION ALL
SELECT * FROM mydataset.aggregation_dimension(dimension_a, NULL)
UNION ALL
SELECT * FROM mydataset.aggregation_dimension(NULL, dimension_b)

其中x,y应该是表mydataset.table.table ...但是,我不知道如何定义这种输入的类型。我也不知道是否有可能有这样的设置...

谢谢您的帮助!

I need to create a table with the same aggregations at multiple different levels in BigQuery, for example:

SELECT 
dimension_a, 
dimension_b, 
SUM(value) AS value 
FROM mydataset.table 
GROUP BY dimension_a, dimension_b

UNION ALL 

SELECT 
dimension_a, 
NULL AS dimension_b, 
SUM(value) AS value 
FROM mydataset.table 
GROUP BY dimension_a

UNION ALL

SELECT 
NULL AS dimension_a, 
dimension_b, 
SUM(value) AS value 
FROM mydataset.table 
GROUP BY dimension_b

I guess it is not the most elegant codes... for example, I have 18 different aggregation dimensions, that means I need to stack those similar code blocks 18 times with UNION ALL, I am wondering if there could be a function that allows me to have the aggregation dimension as the input?

For example, something like:

CREATE OR REPLACE TABLE FUNCTION mydataset.aggregation_dimension(X type, Y type)
AS
  SELECT
  X as dimension_a, Y as dimension_b,
  SUM(value) AS value
  FROM mydataset.table 
  GROUP BY X, Y;

SELECT * FROM mydataset.aggregation_dimension(dimension_a, dimension_b)
UNION ALL
SELECT * FROM mydataset.aggregation_dimension(dimension_a, NULL)
UNION ALL
SELECT * FROM mydataset.aggregation_dimension(NULL, dimension_b)

Where X, Y should be a column in the table mydataset.table ... However, I have no idea how to define the type of this kind of inputs. I also don't know if it is possible to have such a setting...

Thank you in advance for your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文