【发布时间】:2021-11-05 09:43:40
【问题描述】:
我在处理 Snowflake 数据仓库中的一些数据时尝试记录错误。
我在特定数据文件上遇到的错误如下,我需要将它放入一个名为DATA_LOAD_LOG的表中:
INSERT INTO DWH_OPS.DATA_LOAD_LOG 选择“数据加载过程”,?,?, (datediff('毫秒', ?, ?)/1000), current_schema(), current_database(), current_user(), current_role(), ?, parse_json('[{"Error":"Can't parse 'n/a' as date with format 'YYYY-MM-DD'","调查名称":"data.csv","阶段 名称":"@DWH_OPS.AZURE_BLOB","执行持续时间(在 秒)":5.405}]')::VARIANT
错误信息是:
“无法将 'n/a' 解析为格式为 'YYYY-MM-DD' 的日期”
catch 部分返回不同的语法错误,因为 t 和 'YYYY-MM-DD' 之前有单引号。所以日志不会添加到表中。
这里是捕获部分脚本:
try {
// Try code
} catch (err) {
var obj = {};
var res = [];
obj["Error"] = "Exists";
obj["Error Message"] = err.message;
obj["Status"] = err.status;
obj["Error Code"] = err.code;
res.push(obj);
var insert_into_data_log =
"INSERT INTO DWH_OPS.DATA_LOAD_LOG select 'DATA LOAD PROCEDURE', current_timestamp(), " +
"current_timestamp(), 0, " +
"current_schema(), current_database(), current_user(), current_role(), " +
"'SCRIPT ERROR', parse_json('" +
JSON.stringify(res) +
"')::VARIANT";
var data_log_stmt = snowflake
.createStatement({ sqlText: insert_into_data_log })
.execute();
return err;
}
我尝试用空格替换或转义它:
var errorMsg = err.message; obj['错误信息'] = errorMsg.replace("'","").replace("."," ").replace("\n"," ");
但它根本不起作用,并且抛出了同样的错误。
【问题讨论】:
标签: javascript json escaping try-catch snowflake-cloud-data-platform