#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 /…