跳到主要内容

Parquet 导入

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

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

另外,你也可以省略 read_parquet 函数,让 Goose 根据扩展名自动推断:

SELECT * FROM 'input.parquet';

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

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

要将查询结果加载到已有表,请使用 INSERT INTO + SELECT

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 文件做 union,结果如下:

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

更多选项请参阅 Parquet 加载参考