【发布时间】:2020-11-26 10:30:04
【问题描述】:
我正在尝试将外部 JSON 文件从 Azure Blob 存储加载到 Snowflake。我创建了 LOCATION_DETAILS 表,所有列都作为 Variant。当我尝试加载到表中时,出现以下错误:
谁能帮我解决这个问题?
【问题讨论】:
标签: json load snowflake-cloud-data-platform
我正在尝试将外部 JSON 文件从 Azure Blob 存储加载到 Snowflake。我创建了 LOCATION_DETAILS 表,所有列都作为 Variant。当我尝试加载到表中时,出现以下错误:
谁能帮我解决这个问题?
【问题讨论】:
标签: json load snowflake-cloud-data-platform
您需要创建文件格式并提及文件类型和其他规范,如下所示: 创建或替换文件格式 myjsonformat 类型 = 'JSON' strip_outer_array = true;
然后尝试加载它会工作的文件。
【讨论】:
当我为 Snowflake 使用外部数据时,我喜欢创建链接到 BlobStorage(在本例中)的阶段,这很容易,而且您可以做任何事情都非常简单和透明,就像它是本地数据一样。
像这样创建链接到 blobstorage 的阶段:
CREATE OR REPLACE STAGE "<DATABASE>"."<SCHEMA>"."<STAGE_NAME>"
URL='azure://demostorage178.blob.core.windows.net/democontainer'
CREDENTIALS=(AZURE_SAS_TOKEN='***********************************************')
FILE_FORMAT = (TYPE = JSON);
之后,您可以像这样列出 blobstorage fromo snowflake 中的内容:
list @"<DATABASE>"."<SCHEMA>"."<STAGE_NAME>";
或者像这样:
use database "<DATABASE>";
use schema "<SCHEMA>";
SELECT * FROM @"STAGE_NAME"/sales.json;
如果你需要创建表,使用这个:
create or replace table "<DATABASE>"."<SCHEMA>"."<TABLE>" (src VARIANT);
您可以像这样复制您的数据(对于单个文件):
copy into "<DATABASE>"."<SCHEMA>"."<TABLE>" from @"<STAGE_NAME>"/sales.json;
最后,将它用于您在舞台上获得的所有新数据。注意:您不需要删除以前的数据,它会忽略它并只加载新的。
copy into "<DATABASE>"."<SCHEMA>"."<TABLE>" from @"STAGE_NAME";
【讨论】: