Snowflake cloud data platform 雪花“得到”:(瓦尔查尔(16777216),瓦尔查尔(12))
我已经将一个JSON文件加载到Snowflake阶段。 现在,我的目标是将文件的内容复制到关系表中 表定义为具有varchar或布尔列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
{
"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值时重现那个错误。这可能是问题的线索。