雪花'GET':(VARCHAR(16777216),VARCHAR(12))

时间:2020-01-10 22:08:35

标签: snowflake-cloud-data-platform snowsql

我已将JSON文件加载到Snowflake舞台上。现在,我的目标是将文件的内容复制到关系表中。

表被定义为具有varchar或boolean列。

''' { “ requestRefid”:“ W2W8P”, “ requestid”:“ kki8786f​​1b-03eb”, “ requestTypes”:[ “不卖” ], “ subjectTypes”:[ “当前客户” ], “ firstName”:“ Dan”, “ lastName”:“ Murrary”, “电子邮件”:“ k99008a85ki@gmail.com”, “ phone”:“ 410000869”, “ emailValidation”:是的, “ phoneValidation”:是的, “ message”:“确认”, } '''

这是我正在使用的COPY语句:

''' 复制到TEST。“ PUBLIC” .REQUESTS(REQUESTREFID,REQUESTID,FIRSTNAME,LASTNAME,EMAIL,PHONE,EMAILVALIDATION,PHONEVALIDATION,IDVALIDATION,MESSAGE,CHANNEL) 从(选择$ 1:requestRefid,$ 1:requestid,$ 1:firstName,$ 1:lastName,$ 1:email,$ 1:phone,$ 1:emailValidation,$ 1:phoneValidation,$ 1:idValidation,$ 1:message,$ 1:channel 来自@ sf_tut_stage / sample.json t); '''

这是我得到的错误: SQL错误[1044] [42P13]: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文件的内容:

选择$ 1 来自@ sf_tut_stage / sample.json;

我在做什么错?

我也尝试在copy语句中添加以下内容: file_format =(format_name = SF_TUT_CSV_FORMAT)); 但没有运气。

编写此语句的正确方法是什么,以便它可以将$ 1中的项目加载到各个关系表列中。

谢谢

2 个答案:

答案 0 :(得分:1)

您的代码正在尝试使用:语法从源中提取值,但是它仍然只是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
 ); 

答案 1 :(得分:0)

这是将JSON数据加载到Relational表中的方法。 https://docs.snowflake.net/manuals/user-guide/script-data-load-transform-json.html

您需要使用parse_json()方法。