Можем ли мы скопировать внешний JSON файл в Snowflake? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь загрузить внешний JSON файл из Azure хранилища BLOB-объектов в Snowflake. Я создал таблицу LOCATION_DETAILS со всеми столбцами как вариант. Когда я пытаюсь загрузить данные в таблицу, я получаю следующую ошибку:

Копировать в таблицу из внешнего JSON Подробная информация об ошибке файла

Кто-нибудь может мне в этом помочь?

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Вам необходимо создать формат файла и указать тип файла и другую спецификацию, как показано ниже: создать или заменить формат файла myjsonformat type = 'JSON' strip_outer_array = true;

А затем попытаться загрузить файл будет работать.

0 голосов
/ 07 августа 2020

Когда я использую внешние данные для 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 из снежинки, например:

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";
...