雪花程序因任务执行而失败
Posted
技术标签:
【中文标题】雪花程序因任务执行而失败【英文标题】:Snowflake procedure fail from task execution 【发布时间】:2020-04-03 05:10:52 【问题描述】:从任务运行过程时会记录以下错误消息,但当我手动运行它时工作正常:
存储过程 STAGE_SERVICEBUS_ORDER 中的执行错误:“查询 JSON 响应中缺少代码”在 Statement.execute 第 4 行位置 60.
过程如下:
CREATE OR REPLACE PROCEDURE "STAGE_SERVICEBUS_ORDER"(YEARMONTH VARCHAR)
RETURNS VARCHAR(16777216)
LANGUAGE javascript
EXECUTE AS OWNER
AS '
snowflake.createStatement( sqlText: `Truncate table DM.STG.SERVICEBUS_ORDER`).execute();
var copy_into_statement = `copy into DM.STG.SERVICEBUS_ORDER (FILE_NAME,OBJECT) from ( select metadata$filename, $1 from @SERVICEBUS_ORDER`+YEARMONTH+` ) file_format = (type = ''JSON'' strip_outer_array = false) force=true ON_ERROR = CONTINUE `;
snowflake.createStatement( sqlText: copy_into_statement).execute();
return ''Done'';
';
【问题讨论】:
我遇到了类似的问题。根据 Snowflake 支持人员的说法,这是他们在新版本中引入的一个错误,他们计划在下一个版本中解决。 【参考方案1】:请尝试将$1
替换为PARSE_JSON($1)
。
这是 Snowflake 文档中的一个示例,说明了在 COPY 语句中访问 JSON 文件元数据的解决方案:
-- Create a file format
CREATE OR REPLACE FILE FORMAT my_json_format
TYPE = 'json';
-- Create an internal stage
CREATE OR REPLACE STAGE mystage2
FILE_FORMAT = my_json_format;
-- Stage a data file
PUT file:///tmp/data1.json @mystage2;
-- Query the filename and row number metadata columns
-- and the regular data columns in the staged file
SELECT METADATA$FILENAME, METADATA$FILE_ROW_NUMBER, parse_json($1)
FROM @mystage2/data1.json.gz;
https://docs.snowflake.com/en/user-guide/querying-metadata.html#example-2-querying-the-metadata-columns-for-a-json-file
【讨论】:
以上是关于雪花程序因任务执行而失败的主要内容,如果未能解决你的问题,请参考以下文章
雪花:因异常 java.io.IOException 失败:org.apache.parquet.io.ParquetDecodingException:无法在块 -1 中读取 0 处的值