Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 雪花累计数_Javascript_Aggregate_Snowflake Cloud Data Platform - Fatal编程技术网

Javascript 雪花累计数

Javascript 雪花累计数,javascript,aggregate,snowflake-cloud-data-platform,Javascript,Aggregate,Snowflake Cloud Data Platform,如上图所示,基于以下两个约束条件,我需要VAL的累积总和(如C_sum) 对于每个组,我的总和应重置为0 如果累计总和为负数,则应重置为0 我们可以使用UDTFJS创建自定义聚合函数 UDTFJS类似于SQL-UDTF,但在UDTFJS中我们可以编写js(javascript)代码 在讨论解决方案之前,让我们先介绍一下UDF js的主要3个组件。 所有这些组件将分别针对每个组执行 初始化:它将首先为每个组执行一次 processRow:在执行initialize块之后,processRow

如上图所示,基于以下两个约束条件,我需要VAL的累积总和(如C_sum

  • 对于每个组,我的总和应重置为0
  • 如果累计总和为负数,则应重置为0
    • 我们可以使用UDTFJS创建自定义聚合函数

    • UDTFJS类似于SQL-UDTF,但在UDTFJS中我们可以编写js(javascript)代码

    • 在讨论解决方案之前,让我们先介绍一下UDF js的主要3个组件。 所有这些组件将分别针对每个组执行

    • 初始化:它将首先为每个组执行一次
    • processRow:在执行initialize块之后,processRow将为每一行执行
    • finalize:它将在组末尾的每个分区执行一次

    您正在使用Snowflake吗?为什么要标记SQL Server和MySQL?我已经删除了冲突标记,请只标记您真正使用的RDBMS。
    # CREATE Aggregate Function
    CREATE OR REPLACE FUNCTION "CUM_SUM"(VAL double)
        RETURNS TABLE (C_SUM double)
        LANGUAGE JAVASCRIPT
        AS '{
        processRow: function (row, rowWriter, context) {
          this.sum = this.sum + row.VAL;
          
          if (this.sum<0){
            this.sum=0;
          }
          rowWriter.writeRow({C_SUM: this.sum});
        },
        finalize: function (rowWriter, context) {
        },
        initialize: function(argumentInfo, context) {
         this.sum = 0;
        }}';
    
    # Select Query
    WITH MyTable AS (
        SELECT 'A' AS GP, 1 AS ID, 500.0 as VAL
          UNION ALL SELECT 'A', 2,-400.0
          UNION ALL SELECT 'A', 3,100.0
          UNION ALL SELECT 'A', 4,-50.0
          UNION ALL SELECT 'A', 5,-40.0
          UNION ALL SELECT 'A', 6,-100.0
          UNION ALL SELECT 'A', 7,-50.0
          UNION ALL SELECT 'A', 8,-10.0
          UNION ALL SELECT 'A', 9,30.0
          UNION ALL SELECT 'A', 10,-10.0
          UNION ALL SELECT 'B', 11,600.0
          UNION ALL SELECT 'B', 12,-1000.0
          UNION ALL SELECT 'B', 13,-1600.0
          UNION ALL SELECT 'B', 14,1000.0
          UNION ALL SELECT 'B', 15,-500.0
          UNION ALL SELECT 'B', 16,-400.0
     )
    SELECT *
    FROM MyTable, TABLE( CUM_SUM(TO_DOUBLE(VAL)) OVER  (PARTITION BY gp) ) as t
    order by GP