Как вставить строку в таблицу snowflake, в которой есть поле с типом VARIANT?

#sql #cloud #snowflake-cloud-data-platform #variant

#sql #облако #snowflake-cloud-data-platform #вариант

Вопрос:

Я пытаюсь вставить строку в таблицу snowflake, имеющую следующую структуру:

 CREATE TABLE dataSources  (
  dataSources_id integer,   
  sourceName varchar (100),
  sourceData VARIANT, 
  created_at timestamp
);
  

Мне нужно вставить файл json в sourceData поле вместе с другой информацией о самом источнике:

 INSERT INTO dataSources (dataSources_id, sourceName, sourceData, created_at)
VALUES (1, 'Source 1', ..., '2020-11-18 00:00:00')
  

sourceData Поле является вариантом, и мне нужно поместить в него файл JSON для загрузки с другими данными.

Я пытался использовать:

 PUT C://path/file.json @internal_stage
  

У меня ошибка:

PUT не распознается

Я попытался добавить его непосредственно в запрос:

 INSERT INTO dataSources (dataSources_id, sourceName, sourceData, created_at)
VALUES (1, 'Source 1', PUT C://path/file.json @internal_stage, '2020-11-18 00:00:00')
  

Но это не сработало из-за ошибки синтаксиса SQL.

Ответ №1:

PUT — это команда SnowSQL, вы пока не можете запустить ее через веб-интерфейс:

https://docs.snowflake.com/en/user-guide/snowsql-use.html

После помещения файла в @internal_stage вы можете использовать команду COPY:

 COPY INTO dataSources (dataSources_id, sourceName, sourceData, created_at) 
FROM (SELECT 1, 'Source 1', $1, '2020-11-18 00:00:00'
FROM @internal_stage ) FILE_FORMAT=(TYPE=JSON);
  

https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html

Если содержимое JSON отсутствует в файле, вы также можете использовать этот запрос для вставки этой строки:

 INSERT INTO dataSources (dataSources_id, sourceName, sourceData, created_at) 
SELECT 1, 'Source 1', parse_json('{ "name":"test","age":20 }'), '2020-11-18 00:00:00'; 
  

Комментарии:

1. Проблема в том, что я не могу поместить файл JSON в этап

2. вам нужно использовать SnowSQL, чтобы поместить (загрузить) файл в stage. Я поделился ссылкой на snowsql — это инструмент командной строки, который работает на вашем собственном ноутбуке. пожалуйста, попробуйте

3. еще одна вещь, я пытаюсь запустить snowSQL, используя snowsql.exe -a myaccount -u myuser -p mypassword , но он возвращает, что -p не определен должным образом

4. Не знаком с версией Windows, но, как я вижу, -p означает порт, и он устарел docs.snowflake.com/en/user-guide /…