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

从 Parquet 文件读取数据,请在查询的 FROM 子句中使用 read_parquet 函数

SELECT * FROM read_parquet('input.parquet');

或者,您可以省略 read_parquet 函数,让 DuckDB 从文件扩展名推断。

SELECT * FROM 'input.parquet';

要使用查询结果创建新表,请使用 CREATE TABLE ... AS SELECT 语句

CREATE TABLE new_tbl AS
    SELECT * FROM read_parquet('input.parquet');

要将数据从查询加载到现有表中,请使用 SELECT 语句中的 INSERT INTO

INSERT INTO tbl
    SELECT * FROM read_parquet('input.parquet');

或者,也可以使用 COPY 语句将数据从 Parquet 文件加载到现有表中

COPY tbl FROM 'input.parquet' (FORMAT parquet);

动态调整 Schema

您可以使用以下技巧将 Parquet 文件加载到略有不同的 Schema 中(例如,列数不同,类型更宽松)。

假设我们有一个包含两列 c1c2 的 Parquet 文件

COPY (FROM (VALUES (42, 43)) t(c1, c2))
TO 'f.parquet';

如果我们想添加一个文件中不存在的列 c3,我们可以运行

FROM (VALUES(NULL::VARCHAR, NULL, NULL)) t(c1, c2, c3)
WHERE false
UNION ALL BY NAME
FROM 'f.parquet';

第一个 FROM 子句生成一个包含 列的空表,其中 c1VARCHAR 类型。然后,我们使用 UNION ALL BY NAME 来联合 Parquet 文件。结果如下:

┌─────────┬───────┬───────┐
│   c1    │  c2   │  c3   │
│ varchar │ int32 │ int32 │
├─────────┼───────┼───────┤
│ 42      │  43   │ NULL  │
└─────────┴───────┴───────┘

有关更多选项,请参阅 Parquet 加载参考