Spec-Zone.ru › DuckDB

Комбинирование схем

Примеры

Прочитать набор CSV-файлов, объединив столбцы по позиции:

SELECT * FROM read_csv('flights*.csv');

Прочитать набор CSV-файлов, объединив столбцы по имени:

SELECT * FROM read_csv('flights*.csv', union_by_name = true);

Комбинирование схем

При чтении из нескольких файлов, нам необходимо объединить схемы из этих файлов. Это потому, что каждый файл имеет свою собственную схему, которая может отличаться от других файлов. DuckDB предлагает два способа объединения схем нескольких файлов: по позиции столбцов и по имени столбцов.

По умолчанию, DuckDB считывает схему первого предоставленного файла, а затем объединяет столбцы в последующих файлах по позиции столбцов. Это работает правильно, пока все файлы имеют одинаковую схему. Если схема файлов отличается, вы можете использовать union_by_name параметр, чтобы позволить DuckDB построить схему, читая все имена.

Ниже приведен пример того, как работают оба метода.

Объединение по позиции

По умолчанию, DuckDB объединяет столбцы этих различных файлов по позиции. Это означает, что первый столбец в каждом файле объединяется вместе, а также второй столбец в каждом файле и т. д. Например, рассмотрим следующие два файла.

flights1.csv:

FlightDate|UniqueCarrier|OriginCityName|DestCityName
1988-01-01|AA|New York, NY|Los Angeles, CA
1988-01-02|AA|New York, NY|Los Angeles, CA

flights2.csv:

FlightDate|UniqueCarrier|OriginCityName|DestCityName
1988-01-03|AA|New York, NY|Los Angeles, CA

Чтение двух файлов одновременно даст следующий результат:

FlightDate UniqueCarrier OriginCityName DestCityName
1988-01-01 AA New York, NY Los Angeles, CA
1988-01-02 AA New York, NY Los Angeles, CA
1988-01-03 AA New York, NY Los Angeles, CA

Это эквивалентно SQL-конструкции UNION ALL.

Объединение по имени

Если вы обрабатываете несколько файлов с различными схемами, возможно, потому что столбцы были добавлены или переименованы, может быть желательно объединить столбцы разных файлов по имени вместо этого. Это можно сделать, предоставив union_by_name параметр. Например, рассмотрим следующие два файла, где flights4.csv имеет дополнительный столбец (UniqueCarrier).

flights3.csv:

FlightDate|OriginCityName|DestCityName
1988-01-01|New York, NY|Los Angeles, CA
1988-01-02|New York, NY|Los Angeles, CA

flights4.csv:

FlightDate|UniqueCarrier|OriginCityName|DestCityName
1988-01-03|AA|New York, NY|Los Angeles, CA

Чтение этих файлов при объединении столбцов по позиции приводит к ошибке – так как два файла имеют разное количество столбцов. При указании union_by_name параметра столбцы правильно объединяются, а любые отсутствующие значения устанавливаются в NULL.

SELECT * FROM read_csv(['flights3.csv', 'flights4.csv'], union_by_name = true);
FlightDate OriginCityName DestCityName UniqueCarrier
1988-01-01 New York, NY Los Angeles, CA NULL
1988-01-02 New York, NY Los Angeles, CA NULL
1988-01-03 New York, NY Los Angeles, CA AA

Это эквивалентно SQL-конструкции UNION ALL BY NAME.

Использование union_by_name параметра увеличивает потребление памяти.

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

Spec-Zone.ru

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