查询
INFORMATION_SCHEMA
或SHOW FUNCTION
时,我们可以找到一列IS_MEMOIZABLE
。
SELECT IS_MEMOIZABLE, *
FROM INFORMATION_SCHEMA.FUNCTIONS;
内置函数均不可记忆:
SHOW BUILTIN FUNCTIONS;
SELECT "is_memoizable", *
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE "is_memoizable" <> 'N';
-- 0 rows
在计算中,记忆化或记忆化是一种优化技术,主要用于通过存储昂贵的函数调用的结果并在相同的输入再次发生时返回缓存的结果来加速计算机程序。
问题是如何创建具有
IS_MEMOIZABLE
属性等于 'Y'(true) 的用户定义函数?
是否需要任何特定关键字和/或它是否适用于特定类型的函数(外部/Python/Java/不可变/...)?
标量 SQL UDF 可以是可记忆的。 可记忆函数会缓存调用标量 SQL UDF 的结果,然后在稍后需要输出时返回缓存的结果。使用可记忆函数的好处是提高复杂查询的性能,例如行访问策略或屏蔽策略中引用的映射表中的多列查找。
您可以通过指定
关键字来定义可在 CREATE FUNCTION 语句中记忆的标量 SQL UDF。 您可以创建一个可记忆的函数,无论是否带有参数。MEMOIZABLE
示例:
CREATE OR REPLACE FUNCTION test()
RETURNS INT
MEMOIZABLE
AS
$$SELECT 1$$;