Я написал несколько пользовательских logi c в анонимном блоке HANA. Я использовал функцию группировки где-то посередине в качестве ядра. Это сработало хорошо, и результат был удовлетворительным. Как только я попытался индустриализировать его, перейдя к табличной функции HANA, активация прошла успешно, однако функция начала выдавать ошибку, как показано ниже, при попытке выбрать из нее.
Не удалось выполнить 'udf_foo ()' SAP DBTech JDB C: [7]: функция не поддерживается: функции grouping_id () или grouping () должны использоваться с наборами группировки
Не могли бы вы сказать, официально ли операция grouping () не поддерживается по UDF таблицы на HANA? Я использую 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.