#snowflake-cloud-data-platform
#платформа облачных данных snowflake
Вопрос:
Я пытался экспортировать таблицу во внешнее хранилище s3 с перезаписью.
Но опция перезаписи, похоже, не работает.
Ниже приведен запрос, который использовался для экспорта:
copy into @s3_stage/2020/08/20/test_20200820
from (select object_construct('id', id, 'user_id', user_id) from sample_table)
file_format = ( type = json )
overwrite = true;
Файлы результатов были выведены как test_20200820_0_ *_0.json.gz перезапись witch не гарантировалась.
s3_output_files
Спасибо.
Ответ №1:
Если я правильно понимаю вашу проблему, проблема в том, что сгенерированные имена файлов НЕ являются ДЕТЕРМИНИРОВАННЫМИ из-за автоматического «разделения», которое происходит во время экспорта из Snowflake с помощью COPY INTO <location>
команды … это правильно?
Если да, пробовали ли вы использовать SINGLE = TRUE
опцию (чтобы обойти операцию разделения файла)? Для получения более подробной информации, пожалуйста, смотрите страницу документов Snowflake.
Комментарии:
1. Спасибо @Darren. Когда я попробовал приведенный ниже запрос с единственным значением true, он работал правильно.
copy into @s3_stage/2020/08/20/test_20200820.json.gz from (select object_construct('id', id, 'user_id', user_id) from sample_table) file_format = ( type = json ) single = true overwrite = true;
Тогда означает ли это, что один параметр должен иметь значение true, чтобы применить переопределение true? Есть ли какой-либо способ применить single off и перезаписать true одновременно?2. Помимо указания «SINGLE = TRUE» и перезаписи одного (детерминированного) имени файла, я не верю, что существует способ заставить «OVERWRITE = TRUE» удалить целевой файл (ы) перед созданием нового файла (ов).
Ответ №2:
Почему бы вам просто не запустить команду rm перед КОПИРОВАНИЕМ
rm @s3_stage
Комментарии:
1. Спасибо @Rajib. Приведенный ниже запрос, который удаляет файлы, работал нормально.
remove @s3_stage/2020/08/20/test_20200820 pattern='.*.json.gz';
Удаление перед копированием выглядит для меня неплохо.