Spec-Zone.ru › DuckDB

Разделенные записи

Примеры

Запишите таблицу в разделяемую Hive-набор данных из файлов Parquet:

COPY orders TO 'orders' (FORMAT PARQUET, PARTITION_BY (year, month));

Запишите таблицу в разделяемую Hive-набор данных из файлов CSV, разрешая перезапись:

COPY orders TO 'orders' (FORMAT CSV, PARTITION_BY (year, month), OVERWRITE_OR_IGNORE);

Запишите таблицу в разделяемую Hive-набор данных из сжатых GZIP-файлов CSV, задавая явное расширение файлов данных:

COPY orders TO 'orders' (FORMAT CSV, PARTITION_BY (year, month), COMPRESSION GZIP, FILE_EXTENSION 'csv.gz');

Разделенные записи

Когда PARTITION_BY используется для COPY оператора, файлы записываются в иерархии папок Hive. Цель - имя корневой директории (в примере выше: orders). Файлы записываются в порядке в файловой иерархии. В настоящее время каждый поток записывает один файл в каждый каталог.

orders
├── year=2021
│    ├── month=1
│    │   ├── data_1.parquet
│    │   └── data_2.parquet
│    └── month=2
│        └── data_1.parquet
└── year=2022
     ├── month=11
     │   ├── data_1.parquet
     │   └── data_2.parquet
     └── month=12
         └── data_1.parquet

Значения разделов автоматически извлекаются из данных. Обратите внимание, что запись многих разделов может быть очень дорогостоящей, так как будет создано множество файлов. Идеальное количество разделов зависит от размера вашего набора данных.

Рекомендация Запись данных во множество небольших разделов затратна. Обычно рекомендуется иметь как минимум 100 MB данных на раздел.

Перезапись

По умолчанию разделенная запись не разрешает перезапись существующих каталогов. Используйте опцию OVERWRITE_OR_IGNORE для разрешения перезаписи существующего каталога.

Шаблон имени файла

По умолчанию файлы будут иметь имена data_0.parquet или data_0.csv. С флагом FILENAME_PATTERN можно определить шаблон с {i} или {uuid}, чтобы создать определенные имена файлов:

  • {i} будет заменено индексом
  • {uuid} будет заменено 128-битным UUID

Запишите таблицу в разделяемую Hive-набор данных из файлов .parquet, с индексом в имени файла:

COPY orders TO 'orders'
    (FORMAT PARQUET, PARTITION_BY (year, month), OVERWRITE_OR_IGNORE, FILENAME_PATTERN 'orders_{i}');

Запишите таблицу в разделяемую Hive-набор данных из файлов .parquet, с уникальными именами файлов:

COPY orders TO 'orders'
    (FORMAT PARQUET, PARTITION_BY (year, month), OVERWRITE_OR_IGNORE, FILENAME_PATTERN 'file_{uuid}');

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

Spec-Zone.ru

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