读取数据是操作数据的第一步。本文将详细介绍如何使用 DuckDB 进行数据读取,包括各种文件格式数据的读取方法及其适用场景。
DuckDB 支持从 CSV 文件高效读取数据。以下是几种常用的方法:
SELECT * FROM 'test.csv';
read_csv
函数: SELECT * FROM read_csv('test.csv', header = false);
COPY
语句: COPY tbl FROM 'test.csv' (HEADER false);
此外,DuckDB 还能处理压缩的 CSV 文件,如 gzip 压缩的文件。
SELECT * FROM 'test.csv.gz';
Parquet 是一种高效的列式存储格式,DuckDB 同样支持直接读取和查询 Parquet 文件:
SELECT * FROM 'test.parquet';
read_parquet
函数: SELECT * FROM read_parquet('test.parquet');
COPY
语句: COPY tbl FROM 'test.parquet';
JSON 格式广泛用于数据交换,DuckDB 提供了读取和查询 JSON 文件的功能:
SELECT * FROM 'test.json';
read_json_auto
函数: SELECT * FROM read_json_auto('test.json');
COPY
语句: COPY tbl FROM 'test.json';
上面介绍了 DuckDB 读取单文件的方法,DuckDB 还支持读取多文件,并将读取的内容视为单表。以 csv 文件为例:(parquet、json 文件同理)
SELECT * FROM 'dir/**/*.csv';
SELECT * FROM read_csv(['flights1.csv', 'flights2.csv']);
一般情况下,批量读取多个文件时,要求每个文件的表头是相同的,也就是列名相同,这种情况下,使用上述两种方法批量读取即可。
特殊情况下,批量读取的文件的表头不同,DuckDB 也可以优雅的应对此种场景,只需添加 union_by_name
参数,如果还想区分数据的文件名称,再加上 filename
参数即可。
SELECT * FROM read_csv(['D:/duckdb/data/a/flights1.csv', 'D:/duckdb/data/b/flights2.csv'], union_by_name = true, filename = true);
DuckDB 提供了多种数据读取和加载方法。这些方法使得 DuckDB 成为一个灵活且强大的数据库系统,适用于各种数据的读取和加载需求。无论是快速原型设计还是大规模数据处理,DuckDB 都能提供高效的解决方案。