一直试图开始在雪花中使用Python过程。我有另一个基本的程序,很好,但我不能让这部分工作。我希望过滤一个数据,但得到这个奇怪的错误。
[P0000][100357] Python Interpreter Error: Traceback (most recent call last): File "_udf_code.py", line 6, in run File "/usr/lib/python_udf/de--0d/lib/python3.8/site-packages/snowflake/snowpark/_internal/telemetry.py", line 133, in wrap result = func(*args, **kwar ...下面是存储过程,它非常简单
CREATE OR REPLACE PROCEDURE utility.procedure.RECREATE_STALE_STREAM_PYTHON()
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'run'
AS
$$
from snowflake.snowpark.functions import col
def run(session):
show_streams = "show streams in account;"
streams = session.sql(show_streams)
stale_streams = streams.filter(col('stale') == 'true').collect();
return stale_streams
$$;提前感谢
我已经试过了我能想到的一切,似乎都没有用。
发布于 2022-11-11 08:48:18
从Python代码中调用的存储过程失败,错误如下:
无效标识符'STALE‘
在本例中,之所以发生这种情况,是因为Python使用不带双引号的列名生成实际的SQL语句,而实际的列名是用小号书写的。
如果SQL命令中没有双引号,则对象名称总是大写的。(这在99%的病例中是罚款的)。
但是,如果对象标识符不是所有大写的,那么必须使用双引号来保留大小写。在Python中,它看起来像是在对象标识符周围添加了一对双引号:
(col('"stale"') == 'true')有关引号和未引号标识符的详细信息,请参阅doc:标识符要求。
可以在UI控制台中找到错误的完整堆栈跟踪,这是正确的。另外,您可以找到Python (经典UI中的历史记录,或斯诺视觉中的活动)生成的实际查询,并检查它的正确性,例如,在存储过程调用之外运行并使用SQL命令进行调试。
发布于 2022-11-10 01:42:27
您的UDF定义签名:
CREATE OR REPLACE PROCEDURE utility.procedure.RECREATE_STALE_STREAM_PYTHON()与指定为处理程序的Pyhon函数的签名不匹配:
def run(session):UDF定义在签名中有零个参数。处理程序的签名中有一个参数。它们需要在数量和类型上匹配( Python中的松散类型是可以的,但必须能够转换)。
这里有一个Python示例,它显示了匹配的UDF定义签名和处理程序签名:
UDF签名:
create or replace function multiple_import_files(s string)匹配处理程序的签名:
def compute(s):一个选项是在UDF签名中传递session的值。但是,请注意名称,因为session是保留的SQL关键字。
https://stackoverflow.com/questions/74380061
复制相似问题