Spec-Zone.ru › DuckDB

Чтение нескольких файлов

DuckDB может одновременно читать несколько файлов разных типов (CSV, Parquet, JSON) используя синтаксис подстановки или предоставив список файлов для чтения. См. страницу объединения схем для советов по чтению файлов с различными схемами.

CSV

Прочитать все файлы с именем, оканчивающимся на .csv в папке dir:

SELECT *
FROM 'dir/*.csv';

Прочитать все файлы с именем, оканчивающимся на .csv, на два уровня вглубь:

SELECT *
FROM '*/*/*.csv';

Прочитать все файлы с именем, оканчивающимся на .csv, на любой глубине в папке dir:

SELECT *
FROM 'dir/**/*.csv';

Прочитать CSV-файлы flights1.csv и flights2.csv:

SELECT *
FROM read_csv(['flights1.csv', 'flights2.csv']);

Прочитать CSV-файлы flights1.csv и flights2.csv, объединив схемы по имени и выведя столбец filename:

SELECT *
FROM read_csv(['flights1.csv', 'flights2.csv'], union_by_name = true, filename = true);

Parquet

Прочитать все файлы, соответствующие шаблону подстановки:

SELECT *
FROM 'test/*.parquet';

Прочитать три Parquet-файла и обработать их как одну таблицу:

SELECT *
FROM read_parquet(['file1.parquet', 'file2.parquet', 'file3.parquet']);

Прочитать все Parquet-файлы из двух конкретных папок:

SELECT *
FROM read_parquet(['folder1/*.parquet', 'folder2/*.parquet']);

Прочитать все Parquet-файлы, соответствующие шаблону подстановки на любой глубине:

SELECT *
FROM read_parquet('dir/**/*.parquet');

Чтение нескольких файлов и подстановки

DuckDB также может читать серию Parquet-файлов и обрабатывать их как одну таблицу. Обратите внимание, что это работает только в том случае, если Parquet-файлы имеют одинаковую схему. Вы можете указать, какие Parquet-файлы вы хотите прочитать, используя параметр списка, синтаксис подстановки или сочетание обоих.

Параметр списка

Функция read_parquet может принимать список имён файлов в качестве входного параметра.

Прочитать три Parquet-файла и обработать их как одну таблицу:

SELECT *
FROM read_parquet(['file1.parquet', 'file2.parquet', 'file3.parquet']);

Синтаксис подстановки

Любое имя файла, введённое в функцию read_parquet , может быть точным именем файла или использовать синтаксис подстановки для чтения нескольких файлов, соответствующих шаблону.

Дикий символ Описание
* соответствует любому числу любых символов (включая отсутствие)
** соответствует любому числу подкаталогов (включая отсутствие)
? соответствует одному символу
[abc] соответствует одному символу, указанному в скобках
[a-z] соответствует одному символу из диапазона, указанного в скобках

Обратите внимание, что дикий символ ? в подстановках не поддерживается для чтений из S3 из-за проблем с кодировкой HTTP.

Вот пример, который читает все файлы, оканчивающиеся на .parquet, расположенные в папке test:

Прочитать все файлы, соответствующие шаблону подстановки:

SELECT *
FROM read_parquet('test/*.parquet');

Список подстановок

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

Прочитать все Parquet-файлы из 2 конкретных папок.

SELECT *
FROM read_parquet(['folder1/*.parquet', 'folder2/*.parquet']);

DuckDB может читать несколько CSV-файлов одновременно, используя синтаксис подстановки или предоставление списка файлов для чтения.

Имя файла

Аргумент filename может быть использован для добавления дополнительного столбца filename в результат, который указывает, из какого файла пришла строка. Например:

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

Функция подстановки для поиска имён файлов

Синтаксис подстановки также может использоваться для поиска имён файлов, используя табличную функцию glob. Она принимает один параметр: путь для поиска (который может включать шаблоны подстановки).

Поиск в текущем каталоге всех файлов.

SELECT *
FROM glob('*');
file
test.csv
test.json
test.parquet
test2.csv
test2.parquet
todos.json

Страницы в этом разделе

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

Spec-Zone.ru

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