⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
读取多个文件

DuckDB 可以同时读取多种类型(CSV、Parquet、JSON 文件)的文件,可以通过 glob 语法或提供文件列表的方式进行读取。请参阅合并模式页面,了解读取不同模式文件的技巧。

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

读取所有匹配 glob 模式的文件

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');

多文件读取与 Glob

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

列表参数

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

读取三个 Parquet 文件并将它们视为一个单独的表

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

Glob 语法

输入到read_parquet函数的文件名可以是精确文件名,也可以使用 glob 语法读取匹配模式的多个文件。

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

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

这是一个示例,它读取文件夹test中所有以.parquet结尾的文件

读取所有匹配 glob 模式的文件

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

Glob 列表

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

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

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

DuckDB 可以同时读取多个 CSV 文件,可以通过 glob 语法或提供文件列表的方式进行读取。

文件名

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

SELECT *
FROM read_csv(['flights1.csv', 'flights2.csv'], union_by_name = true, filename = true);
航班日期 出发城市名称 目的城市名称 唯一承运人 文件名
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 函数

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

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

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

本节页面