Как экспортировать таблицу во внешнее хранилище s3 с перезаписью?

#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'; Удаление перед копированием выглядит для меня неплохо.