Spec-Zone.ru › DuckDB

Советы по работе с Parquet

Ниже представлен набор советов, которые помогут при работе с файлами Parquet.

Советы по чтению файлов Parquet

Использование union_by_name при загрузке файлов с различными схемами

Опция union_by_name может использоваться для унификации схемы файлов, имеющих разные или отсутствующие столбцы. Для файлов, в которых отсутствуют определенные столбцы, значения NULL заполняются:

SELECT *
FROM read_parquet('flights*.parquet', union_by_name = true);

Советы по записи файлов Parquet

Использование шаблона шаблона подстановки при чтении или структура разделения Hive Hive partitioning являются хорошими способами для прозрачной обработки нескольких файлов.

Включение PER_THREAD_OUTPUT

Если окончательное количество файлов Parquet не имеет значения, запись одного файла на поток может значительно повысить производительность:

COPY
    (FROM generate_series(10_000_000))
    TO 'test.parquet'
    (FORMAT PARQUET, PER_THREAD_OUTPUT);

Выбор размера ROW_GROUP_SIZE

Параметр ROW_GROUP_SIZE задает минимальное количество строк в группе строк Parquet, с минимальным значением, равным размеру вектора DuckDB, 2 048, и значением по умолчанию 122 880. Группа строк Parquet — это разбиение строк, состоящее из блока столбца для каждого столбца в наборе данных.

Алгоритмы сжатия применяются только к каждой группе строк, поэтому чем больше размер группы строк, тем больше возможностей для сжатия данных. DuckDB может читать группы строк Parquet параллельно даже внутри одного файла и использует фильтрацию запросов для сканирования только тех групп строк, чьи метаданные соответствуют условию WHERE запроса. Однако существует определённая издержки, связанная с чтением метаданных в каждой группе. Хорошим подходом было бы убедиться, что в каждом файле общее количество групп строк по меньшей мере равно количеству потоков CPU, используемых для запроса этого файла. Больше групп строк сверх количества потоков увеличит скорость высокоселективных запросов, но замедлит запросы, которые должны сканировать весь файл, такие как агрегации.

Чтобы выполнить запрос на файл Parquet с другим размером группы строк, выполните:

COPY
    (FROM generate_series(100_000))
    TO 'row-groups.parquet'
    (FORMAT PARQUET, ROW_GROUP_SIZE 100_000);

Параметр ROW_GROUPS_PER_FILE

Параметр ROW_GROUPS_PER_FILE создаёт новый файл Parquet, если текущий файл имеет указанное количество групп строк.

COPY
    (FROM generate_series(100_000))
    TO 'output-directory'
    (FORMAT PARQUET, ROW_GROUP_SIZE 20_000, ROW_GROUPS_PER_FILE 2);

Если активны несколько потоков, количество групп строк в файле может незначительно превышать указанное количество групп строк, чтобы ограничить количество блокировок — аналогично поведению FILE_SIZE_BYTES. Однако, если PER_THREAD_OUTPUT установлено, только один поток записывает в каждый файл, и это становится точным снова.

См. Руководство по производительности «Форматы файлов» для получения дополнительных советов.

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/data/parquet/tips.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API