无法在 Snowflake 中创建返回 "Table" 的 UDF - 编译错误

Cannot create UDFs returning "Table" in Snowflake - compilation error

USE AGDWHDEV.EDW_WEATHER; -- My database and schema

CREATE OR REPLACE function EDW_WEATHER.find_nearest_radar()
  returns table (LATITUDE number, LONGITUDE number)
  as 'SELECT 1 LATITUDE, 1 LONGITUDE';

-- The function compiled successfully but when I ran it:

select EDW_WEATHER.find_nearest_radar();

-- I get this:

002141 (42601): SQL compilation error:

Unknown user-defined function EDW_WEATHER.FIND_NEAREST_RADAR

如果我将 return 类型更改为 FLOAT(非 Table)或任何简单的 return 类型,它将起作用。下定决心,我在网上搜索并按照以下示例进行操作,网址为:

https://www.bmc.com/blogs/snowflake-user-defined-functions/

在“雪花 table 函数”部分中

但是我得到了同样的错误!我做错了什么?

因为它returns一个table,你不能直接select它。它需要是一个来源,因此包裹在 TABLE 中并被称为:

CREATE OR REPLACE function edw_weather.find_nearest_radar()
  returns table (LATITUDE number, LONGITUDE number)
  as 'SELECT 1, 1';
SEECT * 
FROM TABLE(edw_weather.find_nearest_radar());

给出:

LATITUDE LONGITUDE
1 1

注意:SELECT 1 LATITUDE, 1 LONGITUDE 可以只是 SELECT 1,1,因为列的名称已在输出中声明。但是经常使用别名,使用 AS 来帮助显示你对 rename/etc 节错过逗号的含义不太容易出错。 SELECT 1 AS latitude, 1 AS longitude