Google Big Query:窗口函数行跨列的明确累计和

时间:2016-01-08 06:55:31

标签: sql google-bigquery window-functions udf

我希望计算Google Big Query中各列的累计总和。

假设有五列(NAME,A,B,C,D),其中包含两行整数,例如:

 NAME | A | B | C | D
----------------------
 Bob  | 1 | 2 | 3 | 4
 Carl | 5 | 6 | 7 | 8

我正在寻找一个窗口函数或UDF来计算跨行的累积和来生成此输出:

 NAME | A | B  | C  | D
-------------------------
 Bob  | 1 | 3  | 6  | 10
 Carl | 5 | 11 | 18 | 27

非常感谢任何想法或建议!

2 个答案:

答案 0 :(得分:1)

我认为,对于您的要求,有许多合理的解决方法,主要是在设计更好的表格方面。所有这些都取决于您输入数据的方式,最重要的是取决于您的数据输入方式

但是,如果要继续使用所提出的要求 - 以下不完全是您在问题中作为输出所期望的,但作为示例可能有用:

SELECT name, GROUP_CONCAT(STRING(cum)) AS all FROM (
  SELECT name, 
    SUM(INTEGER(num)) 
    OVER(PARTITION BY name 
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum
  FROM (
    SELECT name, SPLIT(all) AS num FROM (
      SELECT name, 
         CONCAT(STRING(a),',',STRING(b),',',STRING(c),',',STRING(d)) AS all 
      FROM yourtable
    )
  )
)
GROUP BY name

输出是:

name    all  
Bob     1,3,6,10     
Carl    5,11,18,26   

取决于您如何使用这些数据 - 它仍然适合您 请注意,现在不要忘记编写像col1 + col2 + .. + col89 + col90这样的内容 - 但仍需要明确提及每一列。

如果你有"奢侈"在GBQ UI之外实现您的需求,而不是在某些Client中 - 您可以使用BigQuery API以编程方式获取表模式,并在您的逻辑/查询上构建并执行它 请看下面的API开始:
获取表格架构 - https://cloud.google.com/bigquery/docs/reference/v2/tables/get
发出查询作业 - https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert

答案 1 :(得分:0)

不需要UDF:

SELECT name, a, a+b, a+b+c, a+b+c+d
FROM tab