Snowflake: команда копирования не генерирует постоянный размер для нескольких файлов при выгрузке

скопировать в @elasticsearch/product/s3file из (выберите object_construct(*) из mytable) file_format = (type = json, COMPRESSION=NONE), overwrite=TRUE, single = False, max_file_size=5368709120;

в таблице 2 ГБ данных. Я хочу разделить их на файлы размером 100 МБ для хранения в S3, но s3 разбивает их на файлы неравного размера. Ожидается наличие нескольких файлов размером 100 МБ

Мне нужно улучшить производительность для индексации в эластичном поиске, я использую smart_open для многопроцессорной обработки. так будет удобно обрабатывать файлы. Спасибо

2 ответа

Это не S3, разбивающий файлы, его размер снежинки, который разбивает файл, как если бы вы использовали SINGLE=False в команде копирования. По мере увеличения размера WH количество файлов будет увеличиваться

Пример: вы выполняете свой запрос с размером XS wh, и он создает 8 файлов на s3, и если вы используете размер WH, то он создаст 16 файлов на s3. и его разделение происходит в параллельном режиме, поэтому размер может быть разным для каждого файла. Это не значит, что он создает файл с максимальным пределом, который вы указали в команде копирования, а затем запускает другой файл.

Вы получите одинаковые размеры файлов, только если все значения в каждом столбце будут одинакового размера.

Например, если в вашей таблице были столбцы имени и фамилии и одна запись имела значения "Джон", "Смит", а другая запись имела значения "Майкл" "Гарднер", тогда, если каждая запись была записана в другой файл, полученный JSON файлы будут разных размеров, поскольку размер Джона отличается от размера Майкла, а размер Смита отличается от размера Гарднера.

Вы также можете контролировать только максимальный размер файла, но не фактический размер файла. Если вы записали 10 записей в файл и получили размер файла 950 МБ, если следующая запись будет размером 100 МБ, то она будет записана в новый файл, а исходный файл останется на 950 МБ.

Другие вопросы по тегам