⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
CSV 导入技巧

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

如果未正确检测到 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 读取器使用表的模式,而不是从文件中自动检测类型。这可以加快自动检测速度,并防止在自动检测过程中出错。

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