加载选项
数据加载是根据您的业务需求,对来自各种数据源的原始数据进行清洗和转换,然后将结果数据加载到 StarRocks 中以方便分析的过程。
StarRocks 提供了多种数据加载选项
- 加载方式:INSERT、Stream Load、Broker Load、Pipe、Routine Load 和 Spark Load
- 生态系统工具:StarRocks Connector for Apache Kafka®(简称 Kafka connector)、StarRocks Connector for Apache Spark™(简称 Spark connector)、StarRocks Connector for Apache Flink®(简称 Flink connector)以及 SMT、DataX、CloudCanal 和 Kettle Connector 等其他工具
- API:Stream Load 事务接口
这些选项各有其优点,并支持从各自对应的一组数据源系统进行数据拉取。
本主题概述了这些选项,并对它们进行了比较,以帮助您根据数据源、业务场景、数据量、数据文件格式和加载频率来确定最适合您的加载选项。
加载选项简介
本节主要介绍 StarRocks 中可用的加载选项的特点和业务场景。

在以下部分中,“批处理”或“批加载”指的是一次性地将大量数据从指定源加载到 StarRocks,而“流处理”或“流式加载”指的是实时连续地加载数据。
加载方式
INSERT
业务场景
- INSERT INTO VALUES: 将少量数据追加到内部表。
- INSERT INTO SELECT
-
INSERT INTO SELECT FROM
<table_name>: 将对内部表或外部表的查询结果追加到表中。 -
INSERT INTO SELECT FROM FILES(): 将远程存储中数据文件的查询结果追加到表中。
注意对于 AWS S3,此功能从 v3.1 开始支持。对于 HDFS、Microsoft Azure Storage、Google GCS 和 S3 兼容存储(如 MinIO),此功能从 v3.2 开始支持。
-
文件格式
- INSERT INTO VALUES: SQL
- INSERT INTO SELECT
- INSERT INTO SELECT FROM
<table_name>: StarRocks 表 - INSERT INTO SELECT FROM FILES(): Parquet 和 ORC
- INSERT INTO SELECT FROM
数据量:不固定(数据量取决于内存大小。)
Stream Load
业务场景:从本地文件系统批量加载数据。
文件格式:CSV 和 JSON
数据量:10 GB 或更少
Broker Load
业务场景
- 从 HDFS 或云存储(如 AWS S3、Microsoft Azure Storage、Google GCS 和 S3 兼容存储(如 MinIO))批量加载数据。
- 从本地文件系统或 NAS 批量加载数据。
文件格式:CSV、Parquet、ORC 和 JSON(从 v3.2.3 开始支持)
数据量:几十 GB 到几百 GB
Pipe
业务场景:从 HDFS 或 AWS S3 批量加载或流式加载数据。
此加载方式从 v3.2 开始支持。
文件格式:Parquet 和 ORC
数据量:100 GB 到 1 TB 或更多
Routine Load
业务场景:从 Kafka 流式加载数据。
文件格式:CSV、JSON 和 Avro(从 v3.0.1 开始支持)
数据量:MB 到 GB 的数据,以微批次形式加载
Spark Load
业务场景:使用 Spark 集群批量加载存储在 HDFS 中的 Apache Hive™ 表数据。
文件格式:CSV、Parquet(从 v2.0 开始支持)和 ORC(从 v2.0 开始支持)
数据量:几十 GB 到 TB 级别
生态系统工具
Kafka connector
业务场景:从 Kafka 流式加载数据。
Spark connector
业务场景:从 Spark 批量加载数据。
Flink connector
业务场景:从 Flink 流式加载数据。
SMT
业务场景:通过 Flink 从 MySQL、PostgreSQL、SQL Server、Oracle、Hive、ClickHouse 和 TiDB 等数据源加载数据。
DataX
业务场景:在各种异构数据源之间同步数据,包括关系型数据库(例如 MySQL 和 Oracle)、HDFS 和 Hive。
CloudCanal
业务场景:从源数据库(例如 MySQL、Oracle 和 PostgreSQL)迁移或同步数据到 StarRocks。
Kettle Connector
业务场景:与 Kettle 集成。通过将 Kettle 强大的数据处理和转换能力与 StarRocks 的高性能数据存储和分析能力相结合,可以实现更灵活高效的数据处理工作流。
API
Stream Load 事务接口
业务场景:对从 Flink 和 Kafka 等外部系统加载数据所执行的事务实现两阶段提交 (2PC),同时提高高并发流加载的性能。此功能从 v2.4 开始支持。
文件格式:CSV 和 JSON
数据量:10 GB 或更少
加载选项的选择
本节列出了常见数据源的加载选项,帮助您选择最适合您情况的选项。
对象存储
| 数据源 | 可用加载选项 |
|---|---|
| AWS S3 |
|
| Microsoft Azure Storage |
|
| Google GCS |
|
| S3 兼容存储(如 MinIO) |
|
本地文件系统(包括 NAS)
| 数据源 | 可用加载选项 |
|---|---|
| 本地文件系统(包括 NAS) |
|
HDFS
| 数据源 | 可用加载选项 |
|---|---|
| HDFS |
|
Flink、Kafka 和 Spark
| 数据源 | 可用加载选项 |
|---|---|
| Apache Flink® | |
| Apache Kafka® | 注意 如果源数据需要进行多表 Join 和 ETL 操作,您可以使用 Flink 读取和预处理数据,然后使用 Flink connector 将数据加载到 StarRocks。 |
| Apache Spark™ |
数据湖
| 数据源 | 可用加载选项 |
|---|---|
| Apache Hive™ |
|
| Apache Iceberg | (批处理) 创建一个 Iceberg catalog,然后使用 INSERT INTO SELECT FROM <table_name>。 |
| Apache Hudi | (批处理) 创建一个 Hudi catalog,然后使用 INSERT INTO SELECT FROM <table_name>。 |
| Delta Lake | (批处理) 创建一个 Delta Lake catalog,然后使用 INSERT INTO SELECT FROM <table_name>。 |
| Elasticsearch | (批处理) 创建一个 Elasticsearch catalog,然后使用 INSERT INTO SELECT FROM <table_name>。 |
| Apache Paimon | (批处理) 创建一个 Paimon catalog,然后使用 INSERT INTO SELECT FROM <table_name>。 |
请注意,从 v3.2 开始,StarRocks 提供了 统一 Catalog,以帮助您将来自 Hive、Iceberg、Hudi 和 Delta Lake 数据源的表作为统一数据源进行处理,无需数据摄取。
内部表和外部数据库
| 数据源 | 可用加载选项 |
|---|---|
| StarRocks | (批处理) 创建一个 StarRocks 外部表,然后使用 INSERT INTO VALUES 插入少量数据记录,或使用 INSERT INTO SELECT FROM <table_name> 插入表数据。注意 StarRocks 外部表仅支持数据写入,不支持数据读取。 |
| MySQL |
|
| 其他数据库,如 Oracle、PostgreSQL、SQL Server、ClickHouse 和 TiDB |
|