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

DuckDB 可以同时读取多种不同类型的文件(CSV、Parquet、JSON 文件),使用 glob 语法或提供要读取的文件列表。 有关读取具有不同模式文件的提示,请参阅 combining schemas 页面。

CSV

读取文件夹 dir 中所有以 .csv 结尾的文件:

SELECT *
FROM 'dir/*.csv';

读取所有文件名以.csv结尾的文件,深入两个目录:

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

读取文件夹 dir 中任何深度下名称以 .csv 结尾的所有文件:

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

读取CSV文件 flights1.csvflights2.csv:

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

读取CSV文件flights1.csvflights2.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']);

读取与任何深度的glob模式匹配的所有Parquet文件:

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

多文件读取和通配符

DuckDB 还可以读取一系列 Parquet 文件,并将它们视为单个表。请注意,这仅在 Parquet 文件具有相同模式时才有效。您可以使用列表参数、glob 模式匹配语法或两者的组合来指定要读取的 Parquet 文件。

列表参数

read_parquet 函数可以接受文件名列表作为输入参数。

读取三个Parquet文件并将它们视为单个表:

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

Glob 语法

任何输入到read_parquet函数的文件名都可以是一个确切的文件名,或者使用通配符语法来读取匹配模式的多个文件。

通配符 描述
* 匹配任意数量的任意字符(包括无字符)
** 匹配任意数量的子目录(包括无)
? 匹配任意单个字符
[abc] 匹配括号中给出的一个字符
[a-z] 匹配括号内给定范围内的一个字符

请注意,由于HTTP编码问题,S3读取不支持globs中的?通配符。

以下是一个读取位于test文件夹中以.parquet结尾的所有文件的示例:

读取所有匹配通配符模式的文件:

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

Globs列表

glob语法和列表输入参数可以结合使用,以扫描符合多个模式之一的文件。

从2个特定文件夹中读取所有Parquet文件。

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

DuckDB 可以使用 glob 语法或提供要读取的文件列表同时读取多个 CSV 文件。

文件名

filename 参数可用于向结果中添加一个额外的 filename 列,该列指示每一行来自哪个文件。例如:

SELECT *
FROM read_csv(['flights1.csv', 'flights2.csv'], union_by_name = true, filename = true);
航班日期 出发城市名称 目的地城市名称 唯一承运人 文件名
1988-01-01 纽约, 纽约州 洛杉矶, 加利福尼亚州 NULL flights1.csv
1988-01-02 纽约, 纽约州 洛杉矶, 加利福尼亚州 NULL flights1.csv
1988-01-03 纽约, 纽约州 洛杉矶, 加利福尼亚州 AA flights2.csv

用于查找文件名的Glob函数

全局模式匹配语法也可以用于使用glob表函数搜索文件名。 它接受一个参数:要搜索的路径(可能包括全局模式)。

搜索当前目录中的所有文件。

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

本节中的页面