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 中(例如列数不同、类型更宽松)。
假设你有一个包含两列 c1 和 c2 的 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 子句会生成一个包含三列的空表,其中 c1 是 VARCHAR。
然后使用 UNION ALL BY NAME 与 Parquet 文件做 union,结果如下:
┌─────────┬───────┬───────┐
│ c1 │ c2 │ c3 │
│ varchar │ int32 │ int32 │
├─────────┼───────┼───────┤
│ 42 │ 43 │ NULL │
└─────────┴───────┴───────┘
更多选项请参阅 Parquet 加载参考。