Snowflake cloud data platform 雪花“得到”:(瓦尔查尔(16777216),瓦尔查尔(12))

Snowflake cloud data platform 雪花“得到”:(瓦尔查尔(16777216),瓦尔查尔(12)),snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我已经将一个JSON文件加载到Snowflake阶段。 现在,我的目标是将文件的内容复制到关系表中 表定义为具有varchar或布尔列 { "requestRefid": "W2W8P", "requestid": "kki8786f1b-03eb", "requestTypes": [ "Do not sell it" ], "subje

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

表定义为具有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][42P13]:

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

函数“GET”的参数类型无效:VARCHAR16777216, 瓦查尔12

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

函数“GET”的参数类型无效:VARCHAR16777216, 瓦查尔12

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

函数“GET”的参数类型无效:VARCHAR16777216, 瓦查尔12

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

select $1
   from @sf_tut_stage/sample.json;  
我做错了什么

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

file_format = (format_name = SF_TUT_CSV_FORMAT));
但是没有运气


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

以下是将JSON数据加载到关系表中的方法。


您需要使用parse_json方法。

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

如果在从JSON提取列时从后台运行select查询,是否会出现相同的错误?如果是这样,您能否将其缩小到导致问题的列?如果您将文件\u FORMATTYPE=JSON放在分号之前,则无需解析\u JSON。在这种情况下,这可能是正确的,但也有一些情况,例如,如果您有一个包含多个列的CSV,其中一个是JSON,然后你需要这样做。当我尝试运行这个select时,我得到以下错误:100069 22P02:解析JSON时出错:对象值不完整,位置2。当我运行以下Select时,我能够在结果中看到JSON:从@sf_tut_stage_two/ccpasample.JSON t中选择t.$1;如果解析JSON时抛出错误,则可能是格式错误。或者可能是转义字符或类似的问题。但我不熟悉那个特定的错误。当我的stage文件格式被错误地设置为默认CSV,而不是type=JSON时,我可以在解析JSON:complete object值时重现那个错误。这可能是问题的线索。