Чтение нескольких файлов
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