如何克服hana表udf不支持的grouping()函数?

bxpogfeg  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(393)

我在hana匿名块中编写了一些自定义逻辑。我在中间的某个地方使用了分组函数作为核心。它运行良好,结果令人满意。
当我尝试通过移动到hana表函数来实现它的工业化时,激活进行得很顺利,但是函数在尝试从中进行选择时开始抛出如下错误。
无法执行'udf\u foo()'sap dbtech jdbc:[7]:不支持的功能:grouping\u id()或grouping()函数应与分组集一起使用
请问hana上的表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 ( )

另外,我发现了所有报告中的错误https://answers.sap.com/questions/11570257/sap-hana-usage-of-grouping.html 在sps 12中仍未固定。

bhmjp9jg

bhmjp9jg1#

非常感谢您提供了一个非常好的复制示例。这就是它应该做的,它使问题的容易复制。做得好!
现在,我已经没有hana 1 sps 12了(而且已经很久没有使用过了)。所以,我用当前的hana express edition hana 2 sps04进行了尝试,没有任何问题。
udf工作正常,2015年提到的其他错误不再存在。
虽然hana 1 sps 12仍然受支持,但这里的问题是您使用的构建何时开始。hana 1将看不到任何较新的sps,因此所有错误修复都在sps 12分支中完成。这意味着,也许您可以安装当前版本,并且您遇到的问题将得到修复。
除此之外,如果您使用的硬件/操作系统允许的话,我建议您无论如何升级到hana 2。
关于示例代码的两个注解:
这个 SEQUENTIAL EXECUTION 关键字不是必需的。一旦在块中指定了数据更改dml,执行就默认为顺序执行。
表函数的返回表结构与表定义不同( CUSTOMERNVARCHAR(5) 在table上,但是 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)

相关问题