【问题标题】:How to overcome grouping() function not supported by HANA Table UDF?如何克服 HANA 表 UDF 不支持的 grouping() 函数?
【发布时间】:2020-10-09 21:09:13
【问题描述】:

我在 HANA 匿名块中编写了一些自定义逻辑。我在中间某处使用了分组功能作为核心。它运作良好,结果令人满意。

一旦我尝试通过迁移到 HANA 表函数来将其工业化,激活很顺利,但是函数在尝试从中选择时开始抛出如下错误。

无法执行“udf_foo()” SAP DBTech JDBC:[7]:不支持功能:grouping_id() 或 grouping() 函数应与分组集一起使用

您能否告诉 HANA 上的 Table UDF 是否正式不支持 grouping() 操作?
我正在使用 HANA 1.0 SPS 12。作为一种解决方法,我使用了 case 语句。

复制方式:

do begin sequential execution
    create column table t1 ( id int primary key, customer varchar(5), year int, product varchar(5), sales int );
    insert into t1 values(1, 'C1', 2009, 'P1', 100);
    insert into t1 values(2, 'C1', 2009, 'P2', 200);
    insert into t1 values(3, 'C1', 2010, 'P1', 50);
    insert into t1 values(4, 'C1', 2010, 'P2', 150);
    insert into t1 values(5, 'C2', 2009, 'P1', 200);
    insert into t1 values(6, 'C2', 2009, 'P2', 300);
    insert into t1 values(7, 'C2', 2010, 'P1', 100);
    insert into t1 values(8, 'C2', 2010, 'P2', 150);
end;

CREATE FUNCTION udf_grp_test ( ) 
    RETURNS TABLE(
        CUSTOMER        NVARCHAR(2) ,
        YEAR            INT,
        PRODUCT         NVARCHAR(2) ,
        GRP_YEAR        NVARCHAR(1) ,
        SALES           DEC(3,0)
)
AS BEGIN

    RETURN
        SELECT
            CUSTOMER,
            YEAR,
            PRODUCT,
            GROUPING( YEAR ) AS GRP_YEAR,
            SUM(SALES) AS SALES
        FROM
            T1
        GROUP BY GROUPING SETS(
            ( CUSTOMER, YEAR),
            ( CUSTOMER, PRODUCT)
        );

END

-- Works well
SELECT
    CUSTOMER,
    YEAR,
    PRODUCT,
    GROUPING( YEAR ) AS GRP_YEAR,
    SUM(SALES)
FROM
    T1
GROUP BY GROUPING SETS(
    ( CUSTOMER, YEAR),
    ( CUSTOMER, PRODUCT)
)

-- Throws error     
SELECT * FROM udf_grp_test ( ) 

ps。我发现https://answers.sap.com/questions/11570257/sap-hana-usage-of-grouping.html 中报告的所有错误在 SPS 12 中仍未修复。

【问题讨论】:

    标签: sql hana hana-sql-script table-functions grouping-sets


    【解决方案1】:

    非常感谢这个非常好的复制示例。这就是应该这样做的方式,它可以轻松重现问题。 干得好!

    现在,我不再拥有 HANA 1 SPS 12(并且很长时间没有使用过)。因此,我使用当前的 HANA Express Edition HANA 2 SPS04 进行了尝试,完全没有问题。

    UDF 工作正常,2015 年提到的其他错误不再存在。

    虽然仍然支持 HANA 1 SPS 12,但这里的问题是您使用的构建是什么时候。 HANA 1 不会看到任何更新的 SP,因此所有错误修复都在 SPS 12 分支中完成。这意味着,也许您可​​以安装当前版本,并且您遇到的问题将得到解决。

    除此之外,如果您使用的硬件/操作系统允许,我还是建议您升级到 HANA 2。

    关于示例代码的两点说明:

    • SEQUENTIAL EXECUTION 关键字不是必需的。一旦在块中指定数据更改 DML,执行默认为顺序。
    • 表函数的返回表结构与表定义不同(CUSTOMER 在表中是 NVARCHAR(5),但在表函数中是 NVARCHAR(2)。在 HANA 2 中这会导致编译器警告:
      java.sql.SQLWarning: general warning: Type mismatch for table variable "_SYS_SS2_RETURN_VAR_": Target type "NVARCHAR(2)" of attribute "CUSTOMER" not same as assigned type "VARCHAR(5)": line 11 col 5 (at pos 245)

    【讨论】:

    • 谢谢。必须在以后的版本中修复。我会检查构建。
    猜你喜欢
    • 2018-05-10
    • 2015-11-03
    • 1970-01-01
    • 2014-05-08
    • 2019-03-07
    • 2022-01-11
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多