Snowflake cloud data platform 获取上次数据加载查询中的验证错误时出错
我正在使用外部后台将数据加载到snowflake。此操作在存储过程中执行,该过程从雪花任务调用。该过程使用“复制到查询”将数据加载到表中,然后检查验证错误。要获取验证错误,我使用_last作为作业id 用于将数据复制/加载到雪花表中的查询Snowflake cloud data platform 获取上次数据加载查询中的验证错误时出错,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正在使用外部后台将数据加载到snowflake。此操作在存储过程中执行,该过程从雪花任务调用。该过程使用“复制到查询”将数据加载到表中,然后检查验证错误。要获取验证错误,我使用_last作为作业id 用于将数据复制/加载到雪花表中的查询 COPY INTO conference_created_tmp FROM @conference_created_src/year=2021/month=04/day=15/hour=01/ ON_ERROR = 'SKIP_FILE' 用于获取验证错误的
COPY INTO conference_created_tmp FROM @conference_created_src/year=2021/month=04/day=15/hour=01/ ON_ERROR = 'SKIP_FILE'
用于获取验证错误的查询:
SELECT FILE as fileName, ERROR as error
FROM table(validate(conference_created_tmp, job_id => '_last')
错误消息:
SQL编译错误:参数无效[我们找不到的副本]
此会话期间发生的此表]用于表函数。
表函数参数必须是常量
如果我直接在雪花工作表中运行copy-into命令和验证查询,它会工作!!!。但当从过程调用时,它给出了错误
程序代码:
CREATE OR REPLACE PROCEDURE TEST_ERROR_LOG()
RETURNS STRING NOT NULL
LANGUAGE JAVASCRIPT
AS
$$
//Copying data from external stage to snowflake table
const COPY_QUERY = `COPY INTO conference_created_tmp
FROM @conference_created_src/year=2021/month=04/day=15/hour=01/
ON_ERROR = 'SKIP_FILE'`;
const LOAD_ERROR_INSERT_QUERY = `INSERT INTO error_log(eventTime, fileName, error)
SELECT '%eventTime%', FILE as fileName, ERROR as error
FROM table(validate(conference_created_tmp, job_id => '_last'))`;
function log_load_error() {
let params = {
"%eventTime%": Date.now()
};
let insertQuery = LOAD_ERROR_INSERT_QUERY.replace(/%\w+%/g, function (all) {
return params[all] || all;
});
try {
snowflake.execute({sqlText: insertQuery});
} catch (err) {
throw err;
}
}
function loadDataFromStageToTable() {
try {
let resultSet = snowflake.execute({sqlText: COPY_QUERY});
resultSet.next();
} catch (err) {
throw err;
}
}
try {
loadDataFromStageToTable();
log_load_error();
} catch (err) {
throw err;
}
return true;
$$
没有实际的存储过程代码是很难确定的,但我想您希望参数化表名:
SELECT FILE as fileName, ERROR as error
FROM table(validate(IDENTIFIER(:bind_variable), job_id => '_last');
如果是的话,那么你需要把它包起来
将变量绑定为标识符
IDENTIFIER( { string_literal | session_variable | bind_variable } )
文本和变量(会话或绑定)可以在任何可以通过名称识别对象的地方使用(查询、DML、DDL等)
能否提供一个复制错误的示例存储过程?