跳到主要内容

Parquet | File Format

本文介绍如何在 Apache Doris 中导入 Parquet 格式的数据文件,并针对不同导入入口提供可直接复用的示例。

适用场景

Parquet 是一种列式存储格式,常用于离线数仓与对象存储中的批量数据落盘。以下场景适合使用 Parquet 作为导入源:

  • 从 S3、HDFS 等对象存储/分布式文件系统批量导入历史数据。
  • 通过 Stream Load 推送本地或服务端生成的 Parquet 文件。
  • 通过 Broker Load 批量加载存储在远端的 Parquet 文件。
  • 通过表值函数(TVF)按需查询并写入对象存储/HDFS 中的 Parquet 数据。

支持的导入方式

下表汇总了支持 Parquet 格式的导入方式及其典型用途:

导入方式适用场景文档链接
Stream Load本地或服务端文件的实时/批量推送Stream Load
Broker Load远端存储(HDFS、对象存储)批量导入Broker Load
INSERT INTO FROM S3 TVF直接查询 S3 上的 Parquet 文件并写入目标表S3 TVF
INSERT INTO FROM HDFS TVF直接查询 HDFS 上的 Parquet 文件并写入目标表HDFS TVF

使用示例

本节按照导入方式分别给出最小可执行示例。请将示例中的占位符(如 <user><fe_host>bucket 等)替换为实际环境的值。

1. Stream Load 导入 Parquet

通过 HTTP 接口将本地 Parquet 文件直接推送到 Doris 表,需在请求头中显式声明 format: parquet

curl --location-trusted -u <user>:<passwd> \
-H "format: parquet" \
-T example.parquet \
http://<fe_host>:<fe_http_port>/api/example_db/example_table/_stream_load

说明:

  • -H "format: parquet":声明导入文件为 Parquet 格式。
  • -T example.parquet:指定要上传的本地 Parquet 文件。
  • URL 中的 example_dbexample_table 分别为目标数据库与目标表。

2. Broker Load 导入 Parquet

适用于从对象存储或 HDFS 批量加载 Parquet 文件,使用 FORMAT AS "parquet" 指定文件格式。

LOAD LABEL example_db.example_label
(
DATA INFILE("s3://bucket/example.parquet")
INTO TABLE example_table
FORMAT AS "parquet"
)
WITH S3
(
...
);

说明:

  • DATA INFILE:指定 Parquet 文件的远端路径,可使用 s3://hdfs:// 等协议。
  • FORMAT AS "parquet":声明源文件为 Parquet 格式。
  • WITH S3 (...):填写访问对象存储所需的认证信息(如 endpointaccess_keysecret_key 等)。

3. TVF 导入 Parquet

通过表值函数(TVF)配合 INSERT INTO ... SELECT 直接读取远端 Parquet 文件并写入目标表,适用于按需导入与即席分析后落盘的场景。

INSERT INTO example_table
SELECT *
FROM S3
(
"uri" = "s3://bucket/example.parquet",
"format" = "parquet",
...
);

说明:

  • S3(...):表值函数,参数中需指定 uriformat,其他参数(如鉴权信息)按需补充。
  • S3 替换为 HDFS 即可读取 HDFS 上的 Parquet 文件。
  • SELECT * 可替换为字段列表或带过滤条件的查询,实现按需导入。

FAQ

Q1:导入 Parquet 时需要显式指定文件格式吗?

需要。Stream Load 通过请求头 format: parquet 指定;Broker Load 通过 FORMAT AS "parquet" 指定;TVF 通过参数 "format" = "parquet" 指定。

Q2:是否支持从 HDFS 导入 Parquet?

支持。可使用 Broker Load(在 DATA INFILE 中填写 hdfs:// 路径)或 HDFS TVF 实现。

Q3:TVF 导入和 Broker Load 有什么区别?

Broker Load 是异步批量导入作业,适合大批量、定时任务;TVF 通过 INSERT INTO ... SELECT 同步执行,适合按需导入与导入前进行过滤、聚合等加工的场景。