⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
Directly Reading Files

DuckDB 允许通过 read_textread_blob 函数直接读取文件。 这些函数接受一个文件名、文件名列表或通配符模式,并将每个文件的内容分别输出为 VARCHARBLOB,以及文件大小和最后修改时间等附加元数据。

read_text

read_text 表函数从选定的源读取到 VARCHAR。每个文件生成一行,其中 content 字段包含相应文件的全部内容。

SELECT size, parse_path(filename), content
FROM read_text('test/sql/table_function/files/*.txt');
大小 parse_path(filename) 内容
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/*');
大小 内容 文件名
178 PK\x03\x04\x0A\x00\x00\x00\x00\x00\xACi=X\x14t\xCE\xC7\x0A… test/sql/table_function/files/four.blob
12 你好,世界! test/sql/table_function/files/one.txt
2 42 test/sql/table_function/files/three.txt
10 Föö Bär test/sql/table_function/files/two.txt

Schema

read_textread_blob返回的表的模式是相同的:

DESCRIBE FROM read_text('README.md');
列名 列类型 是否为空 默认值 额外信息
文件名 VARCHAR
内容 VARCHAR
大小 BIGINT
last_modified TIMESTAMP YES NULL NULL NULL

处理缺失的元数据

在底层文件系统无法提供某些数据的情况下(例如,因为HTTPFS不能总是返回有效的时间戳),单元格将被设置为NULL

支持投影下推

表函数还利用投影下推来避免不必要地计算属性。因此,例如,您可以使用此功能来遍历一个包含大文件的目录以获取文件大小列中的文件大小,只要您省略内容列,数据就不会被读入DuckDB。