我有以下JSON:
{
"name": "foo \uNo bar"
}
我正在尝试使用 S3 上的 STAGE 将其加载到 Snowflake 中。这是在 CSV 文件中,如下所示:
{"name": "foo \uNo bar"}
但是,当我尝试加载它时,雪花中断并显示解析 JSON 消息时出错。如果我尝试直接在雪花控制台上加载它,如SELECT PARSE_JSON('{"name": "foo \uNo bar"}')
,我会得到:
解析 JSON 时出错:转义序列中应为十六进制数字???? pos 17
问题是 Snowflake 正在解析字符串,检查 unicode 数字uNo
(不存在(。如何禁用此功能?
在 Snowflake 中解析 CSV 的默认文件格式是将双反斜杠字符串'{"name": "foo \uNo bar"}'
解释为字符的转义序列,这意味着字符序列
uNo
被传递给PARSE_JSON然后失败uNo
因为不是 JSON 字符串的有效转义序列。您可以通过覆盖文件格式转义序列设置来防止这种情况。
给定此 CSV 文件:
JSON
'{"name": "foo \uNo bar"}'
以及以下 CREATE TABLE 和 COPY INTO 语句:
CREATE OR REPLACE TABLE JSON_TEST (JSON TEXT);
COPY INTO JSON_TEST
FROM @my_db.public.my_s3_stage/json.csv
FILE_FORMAT = (TYPE = CSV
SKIP_HEADER = 1
FIELD_OPTIONALLY_ENCLOSED_BY = '''
ESCAPE = NONE
ESCAPE_UNENCLOSED_FIELD = NONE);
我能够将那里的结果解析为 JSON:
SELECT PARSE_JSON(JSON) FROM JSON_TEST;
哪个返回
+-----------------------------+
| JSON |
+-----------------------------|
| { "name": "foo \uNo bar" } |
+-----------------------------+