我已经将一个JSON文件加载到了雪花舞台上。
现在,我的目标是将文件的内容复制到关系表中。
表定义为有varchar列或布尔列。
{
"requestRefid": "W2W8P",
"requestid": "kki8786f1b-03eb",
"requestTypes": [
"Do not sell it"
],
"subjectTypes": [
"Current customer"
],
"firstName": "Dan",
"lastName": "Murrary",
"email": "k99008a85ki@gmail.com",
"phone": "410000869",
"emailValidation": true,
"phoneValidation": true,
"message": "Confirm",
}下面是我使用的复制语句:
copy into TEST."PUBLIC".REQUESTS(REQUESTREFID, REQUESTID, FIRSTNAME, LASTNAME, EMAIL, PHONE, EMAILVALIDATION, PHONEVALIDATION, IDVALIDATION, MESSAGE, CHANNEL)
from (select $1:requestRefid, $1:requestid, $1:firstName, $1:lastName, $1:email, $1:phone, $1:emailValidation, $1:phoneValidation, $1:idValidation, $1:message, $1:channel
from @sf_tut_stage/sample.json t);下面是我得到的错误:
SQL错误1044:
SQL编译错误:位置18处的错误第2行
函数GET的无效参数类型:(VARCHAR(16777216),VARCHAR(12))
SQL编译错误:位置18处的错误第2行
函数GET的无效参数类型:(VARCHAR(16777216),VARCHAR(12))
SQL编译错误:位置18处的错误第2行
函数GET的无效参数类型:(VARCHAR(16777216),VARCHAR(12))
我能够在这个阶段使用以下查询查询JSON文件的内容:
select $1
from @sf_tut_stage/sample.json; 我做错了什么?
我还尝试在复制语句中添加以下内容:
file_format = (format_name = SF_TUT_CSV_FORMAT));但没有运气。
编写此语句的正确方法是什么,这样它就可以将$1中的项加载到各个关系表列中。
发布于 2020-01-11 00:05:39
您的代码试图使用:语法从源代码中提取值,但它仍然只是一个varchar,它不允许这种语法。使用PARSE_JSON尝试这样做,这样SnowFlake就知道它是JSON,并且可以适当地应用这个语法。
copy into TEST."PUBLIC".REQUESTS(REQUESTREFID, REQUESTID, FIRSTNAME, LASTNAME, EMAIL, PHONE, EMAILVALIDATION, PHONEVALIDATION, IDVALIDATION, MESSAGE, CHANNEL)
from (
select
PARSE_JSON($1):requestRefid,
PARSE_JSON($1):requestid,
PARSE_JSON($1):firstName,
PARSE_JSON($1):lastName,
PARSE_JSON($1):email,
PARSE_JSON($1):phone,
PARSE_JSON($1):emailValidation,
PARSE_JSON($1):phoneValidation,
PARSE_JSON($1):idValidation,
PARSE_JSON($1):message,
PARSE_JSON($1):channel
from @sf_tut_stage/sample.json t
); 发布于 2020-01-11 00:02:37
下面是将JSON数据加载到Relational的方法。https://docs.snowflake.net/manuals/user-guide/script-data-load-transform-json.html
您需要使用parse_json()方法。
https://stackoverflow.com/questions/59689642
复制相似问题