Прямое чтение файлов
DuckDB позволяет напрямую читать файлы с помощью функций read_text и read_blob. Эти функции принимают имя файла, список имен файлов или шаблон glob и выводят содержимое каждого файла в виде VARCHAR или BLOB, соответственно, а также дополнительную метаданные, такую как размер файла и время последнего изменения.
read_text
Функция таблицы read_text считывает данные из выбранного источника(ов) в VARCHAR. Каждый файл приводит к одной строке с полем content, содержащим все содержимое соответствующего файла.
SELECT size, parse_path(filename), content
FROM read_text('test/sql/table_function/files/*.txt'); | size | parse_path(filename) | content |
|---|---|---|
| 12 | [test, sql, table_function, files, one.txt] | Привет Мир! |
| 2 | [test, sql, table_function, files, three.txt] | 42 |
| 10 | [test, sql, table_function, files, two.txt] | Foo Bar\nFöö Bär |
Содержимое файла сначала проверяется на валидность UTF-8. Если read_text пытается прочитать файл с некорректной кодировкой UTF-8, выбрасывается ошибка, предлагающая использовать read_blob вместо этого.
read_blob
Функция таблицы read_blob считывает данные из выбранного источника(ов) в BLOB:
SELECT size, content, filename
FROM read_blob('test/sql/table_function/files/*'); | size | content | filename |
|---|---|---|
| 178 | PK\x03\x04\x0A\x00\x00\x00\x00\x00\xACi=X\x14t\xCE\xC7\x0A… | test/sql/table_function/files/four.blob |
| 12 | Hello World! | test/sql/table_function/files/one.txt |
| 2 | 42 | test/sql/table_function/files/three.txt |
| 10 | F\xC3\xB6\xC3\xB6 B\xC3\xA4r | test/sql/table_function/files/two.txt |
Схема
Схемы таблиц, возвращаемых функциями read_text и read_blob идентичны:
DESCRIBE FROM read_text('README.md'); | column_name | column_type | null | key | default | extra |
|---|---|---|---|---|---|
| filename | VARCHAR | YES | NULL | NULL | NULL |
| content | VARCHAR | YES | NULL | NULL | NULL |
| size | BIGINT | YES | NULL | NULL | NULL |
| last_modified | TIMESTAMP | YES | NULL | NULL | NULL |
Обработка отсутствующих метаданных
В случаях, когда подлежащая файловая система не может предоставить некоторые из этих данных (например, потому что HTTPFS не всегда может вернуть действительную метку времени), ячейка устанавливается в NULL вместо этого.
Поддержка проецирования вниз
Функции таблицы также используют проецирование вниз, чтобы избежать ненужного вычисления свойств. Таким образом, вы можете, например, использовать это для поиска папки, полной больших файлов, чтобы получить размер файла в столбце size, при условии, что вы опустите столбец content, данные не будут считываться в DuckDB.
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/guides/file_formats/read_file.html