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

lea*_*tle 2 snowflake-cloud-data-platform

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

表定义为具有 varchar 或 Boolean 列。

{
  "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",
}
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

SQL 错误 [1044] [42P13]:

SQL编译错误:错误第2行位于位置18

函数“GET”的参数类型无效:(VARCHAR(16777216)、VARCHAR(12))

SQL编译错误:错误第2行位于位置18

函数“GET”的参数类型无效:(VARCHAR(16777216)、VARCHAR(12))

SQL编译错误:错误第2行位于位置18

函数“GET”的参数类型无效:(VARCHAR(16777216)、VARCHAR(12))

我可以使用以下查询在阶段中查询 JSON 文件的内容:

select $1
   from @sf_tut_stage/sample.json;  
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我还尝试在复制语句中添加以下内容:

file_format = (format_name = SF_TUT_CSV_FORMAT));
Run Code Online (Sandbox Code Playgroud)

但没有运气。

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

Dav*_*son 7

您的代码尝试使用该:语法从源中提取值,但它仍然只是一个 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
 ); 
Run Code Online (Sandbox Code Playgroud)