如何在 Select 查询中调用 Snowflake UDF
How to call a Snowflake UDF in a Select query
我创建了一个 UDF 函数来查找参考 table
CREATE OR REPLACE function udf_rdm_lookup_func_test(
src_system VARCHAR,
src_code VARCHAR,
src_value varchar)
returns array
as
$$
SELECT DISTINCT DESC FROM rdm WHERE SOURCE_CODE = SRC_CODE AND SOURCE_VALUE = SRC_VALUE AND SOURCE_SYSTEM = SRC_SYSTEM
$$
;
我能够在一个简单的 SELECT 查询中调用 UDF
select udf_rdm_lookup_func_test('XYZ','LOBCode','001');
但我想在从另一个 table
读取数据时将其用作查找
SELECT DISTINCT COMPANY_CODE,SRC_SYSTEM_ID,
udf_rdm_lookup_func_test(SRC_SYSTEM_ID,'LOBCode',COMPANY_CODE)[2]
FROM ABC;
运行 我收到一个错误
SQL Error [2031] [42601]: SQL compilation error:¶Unsupported subquery
type cannot be evaluated
想知道如何创建一个可以在 SELECT 语句中使用的函数,同时从另一个 table 读取数据吗?请帮助
您的查询 return 超过 1 个值。利用 table 函数的建议可以解决这个问题,但是如果您想 return 它作为单个值数组,那么您实际上必须创建 SQL 语句来 return 那。尝试在 SELECT.
中使用 ARRAY_AGG() 函数
https://docs.snowflake.net/manuals/sql-reference/functions/array_agg.html
我认为您可以通过将返回值包含在 any_value() 中来解决这个问题。例如:
CREATE OR REPLACE function udf_rdm_lookup_func_test(
src_system VARCHAR,
src_code VARCHAR,
src_value varchar)
returns array
as
$$
SELECT DISTINCT any_value(DESC) FROM rdm WHERE SOURCE_CODE = SRC_CODE AND SOURCE_VALUE = SRC_VALUE AND SOURCE_SYSTEM = SRC_SYSTEM
$$
;
我创建了一个 UDF 函数来查找参考 table
CREATE OR REPLACE function udf_rdm_lookup_func_test(
src_system VARCHAR,
src_code VARCHAR,
src_value varchar)
returns array
as
$$
SELECT DISTINCT DESC FROM rdm WHERE SOURCE_CODE = SRC_CODE AND SOURCE_VALUE = SRC_VALUE AND SOURCE_SYSTEM = SRC_SYSTEM
$$
;
我能够在一个简单的 SELECT 查询中调用 UDF
select udf_rdm_lookup_func_test('XYZ','LOBCode','001');
但我想在从另一个 table
读取数据时将其用作查找SELECT DISTINCT COMPANY_CODE,SRC_SYSTEM_ID,
udf_rdm_lookup_func_test(SRC_SYSTEM_ID,'LOBCode',COMPANY_CODE)[2]
FROM ABC;
运行 我收到一个错误
SQL Error [2031] [42601]: SQL compilation error:¶Unsupported subquery type cannot be evaluated
想知道如何创建一个可以在 SELECT 语句中使用的函数,同时从另一个 table 读取数据吗?请帮助
您的查询 return 超过 1 个值。利用 table 函数的建议可以解决这个问题,但是如果您想 return 它作为单个值数组,那么您实际上必须创建 SQL 语句来 return 那。尝试在 SELECT.
中使用 ARRAY_AGG() 函数https://docs.snowflake.net/manuals/sql-reference/functions/array_agg.html
我认为您可以通过将返回值包含在 any_value() 中来解决这个问题。例如:
CREATE OR REPLACE function udf_rdm_lookup_func_test(
src_system VARCHAR,
src_code VARCHAR,
src_value varchar)
returns array
as
$$
SELECT DISTINCT any_value(DESC) FROM rdm WHERE SOURCE_CODE = SRC_CODE AND SOURCE_VALUE = SRC_VALUE AND SOURCE_SYSTEM = SRC_SYSTEM
$$
;