解析错误 JSON:输入中有多个文档(Redshift 到 Snowflake SQL)
Error parsing JSON: more than one document in the input (Redshift to Snowflake SQL)
我正在尝试将查询从 Redshift 转换为 Snowflake SQL。
Redshift 查询如下所示:
SELECT
cr.creatives as creatives
, JSON_ARRAY_LENGTH(cr.creatives) as creatives_length
, JSON_EXTRACT_PATH_TEXT(JSON_EXTRACT_ARRAY_ELEMENT_TEXT (cr.creatives,0),'previewUrl') as preview_url
FROM campaign_revisions cr
Snowflake 查询如下所示:
SELECT
cr.creatives as creatives
, ARRAY_SIZE(TO_ARRAY(ARRAY_CONSTRUCT(cr.creatives))) as creatives_length
, PARSE_JSON(PARSE_JSON(cr.creatives)[0]):previewUrl as preview_url
FROM campaign_revisions cr
似乎 JSON_EXTRACT_PATH_TEXT 没有正确转换,因为 Snowflake 查询结果错误:
Error parsing JSON: more than one document in the input
cr.creatives 格式如下:
"[{""previewUrl"":""https://someurl.com/preview1.png"",""device"":""desktop"",""splitId"":null,""splitType"":null},{""previewUrl"":""https://someurl.com/preview2.png"",""device"":""mobile"",""splitId"":null,""splitType"":null}]"
在我看来,您没有使用 Snowflake 中的有效 JSON 数据。
请检查用于复制到命令的文件格式。
如果您打开文本编辑器中提供的“JSON”文本,请注意,由于您的引述,该信息不会被解析或格式化为 JSON。一旦你的双引号/转义引号问题得到处理,你应该能够取得很好的进展
右边JSON ||右边原始数据
如果您不想重新加载数据,请查看是否可以创建一个 Javascript 用户定义函数来删除字符串中的引号,然后您可以使用 Snowflake 处理变体列。
以下代码正在运行 POJO,可用于为您删除双引号。
var textOriginal = '[{""previewUrl"":""https://someurl.com/preview1.png"",""device"":""desktop"",""splitId"":null,""splitType"":null},{""previewUrl"":""https://someurl.com/preview2.png"",""device"":""mobile"",""splitId"":null,""splitType"":null}]';
function parseText(input){
var a = input.replaceAll('""','\"');
a = JSON.parse(a);
return a;
}
x = parseText(textOriginal);
console.log(x);
我正在尝试将查询从 Redshift 转换为 Snowflake SQL。
Redshift 查询如下所示:
SELECT
cr.creatives as creatives
, JSON_ARRAY_LENGTH(cr.creatives) as creatives_length
, JSON_EXTRACT_PATH_TEXT(JSON_EXTRACT_ARRAY_ELEMENT_TEXT (cr.creatives,0),'previewUrl') as preview_url
FROM campaign_revisions cr
Snowflake 查询如下所示:
SELECT
cr.creatives as creatives
, ARRAY_SIZE(TO_ARRAY(ARRAY_CONSTRUCT(cr.creatives))) as creatives_length
, PARSE_JSON(PARSE_JSON(cr.creatives)[0]):previewUrl as preview_url
FROM campaign_revisions cr
似乎 JSON_EXTRACT_PATH_TEXT 没有正确转换,因为 Snowflake 查询结果错误:
Error parsing JSON: more than one document in the input
cr.creatives 格式如下:
"[{""previewUrl"":""https://someurl.com/preview1.png"",""device"":""desktop"",""splitId"":null,""splitType"":null},{""previewUrl"":""https://someurl.com/preview2.png"",""device"":""mobile"",""splitId"":null,""splitType"":null}]"
在我看来,您没有使用 Snowflake 中的有效 JSON 数据。
请检查用于复制到命令的文件格式。
如果您打开文本编辑器中提供的“JSON”文本,请注意,由于您的引述,该信息不会被解析或格式化为 JSON。一旦你的双引号/转义引号问题得到处理,你应该能够取得很好的进展
右边JSON ||右边原始数据
如果您不想重新加载数据,请查看是否可以创建一个 Javascript 用户定义函数来删除字符串中的引号,然后您可以使用 Snowflake 处理变体列。
以下代码正在运行 POJO,可用于为您删除双引号。
var textOriginal = '[{""previewUrl"":""https://someurl.com/preview1.png"",""device"":""desktop"",""splitId"":null,""splitType"":null},{""previewUrl"":""https://someurl.com/preview2.png"",""device"":""mobile"",""splitId"":null,""splitType"":null}]';
function parseText(input){
var a = input.replaceAll('""','\"');
a = JSON.parse(a);
return a;
}
x = parseText(textOriginal);
console.log(x);