⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
CSV 导入技巧

以下是一些在尝试导入复杂 CSV 文件时有用的技巧。在示例中,我们使用 flights.csv 文件。

如果未正确检测到表头,请覆盖 Header 标志

如果文件仅包含字符串列,则 header 自动检测可能会失败。请提供 header 选项以覆盖此行为。

SELECT * FROM read_csv('flights.csv', header = true);

如果文件不包含表头,请提供列名

如果文件不包含表头,系统默认会自动生成列名。你可以通过 names 选项提供自定义的列名。

SELECT * FROM read_csv('flights.csv', names = ['DateOfFlight', 'CarrierName']);

覆盖特定列的类型

types 标志可用于仅覆盖特定列的类型,通过提供 nametype 映射的结构体来实现。

SELECT * FROM read_csv('flights.csv', types = {'FlightDate': 'DATE'});

将数据加载到表中时使用 COPY

COPY 语句将数据直接复制到表中。CSV 读取器使用表的模式(schema),而不是从文件中自动检测类型。这加快了自动检测速度,并防止了在自动检测过程中出错。

COPY tbl FROM 'test.csv';

加载具有不同模式的文件时使用 union_by_name

union_by_name 选项可用于统一具有不同或缺失列的文件的模式。对于缺少某些列的文件,将填充 NULL 值。

SELECT * FROM read_csv('flights*.csv', union_by_name = true);

要将数据加载到现有表(且该表的列多于 CSV 文件)中,可以使用 INSERT INTO ... BY NAME 子句

INSERT INTO tbl BY NAME
    SELECT * FROM read_csv('input.csv');

采样大小

如果 CSV 嗅探器未检测到正确的类型,请尝试增加采样大小。选项 sample_size = -1 会强制嗅探器读取整个文件。

SELECT * FROM read_csv('my_csv_file.csv', sample_size = -1);
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南