我正在尝试计算多个值并在select子句中获取它们。无论是通过UDF计算还是程序对我来说无关紧要,但我无法弄清楚如何以任何一种方式进行。我想这样使用它:
SELECT ID, BITMAP(ID) FROM X;
然后应该返回一个包含ID, Bitset1, Bitset2
列的表。如果可能,它应该尽可能高效。
我目前有三个版本(简化版,实际上有更多的计算版):
表格UDF
CREATE FUNCTION TPCH.BITMAP(IN col BIGINT)
RETURNS table("BITSET1" bigint, "BITSET2" bigint)
AS BEGIN
declare bitset1, bitset2 bigint;
bitset1 = 1;
bitset2 = 2;
return select bitset1 as "BITSET1", bitset2 as "BITSET2" from sys.dummy;
END;
标量UDF
CREATE FUNCTION BITMAP(IN col BIGINT)
RETURNS bitset1 bigint, bitset2 bigint
AS BEGIN
declare bitset1, bitset2 bigint;
bitset1 = 1;
bitset2 = 2;
END;
程序
create procedure BITMAP(in col BIGINT,
out bitsets table("BITSET1" bigint, "BITSET2" bigint))
as begin
bitsets = select 1 as "BITSET1", 2 as "BITSET2" from sys.dummy;
end;
如果我执行上面的select语句,我会得到不同的例外:
TUDF / 程序:cannot use procedure or table function in select projection column or cannot use window function w/o OVER: P_BITMAP
SUDF :This user defined function has multiple outputs, but this usage requires a single output. Specify a single output.
我发现对于 SUDF 我可以这样写:
select ID, BITMAP(ID).bitset1, BITMAP(ID).bitset2 from X;
但这会执行BITMAP(ID)两次,这会让它变慢。我想一次性获取这两个值。
这是否可以在Hana中进行,还是有其他选择?
编辑1:以澄清udfs和过程通常取决于输入。为简单起见,我只是在示例中返回1和2.
答案 0 :(得分:0)
如上所述,在HANA 1中,存在以下与用户定义函数有关的限制:
要将用户定义的函数并行应用于多个值,HANA 2提供了多个新功能,例如
MAP_MERGE
函数,用于实现map-reduce调用模式添加:可以在此处找到HANA 2中MAP_MERGE功能的一个很好的示例:https://blogs.sap.com/2016/12/01/sap-hana-2.0-sps-0-new-developer-features-database-development/