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.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']);
读取与任何深度的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 |