介绍将数据导入 StarRocks 的常用方法。
准备工作
- 确保已执行
01_prepare_table.sql创建目标表。 - 确保你的 StarRocks FE HTTP 端口是 8030 (Docker 默认)。
导入方式
1. Insert Into
最简单的 SQL 插入,适用于测试或小批量数据。
INSERT INTO stream_load_demo VALUES (99, 'Test', '2023-01-01');
2. Stream Load (推荐)
最常用的实时/准实时导入方式,通过 HTTP 协议上传文件。
- CSV 导入 : 运行
sh 02_stream_load_csv.sh - JSON 导入 : 运行
sh 03_stream_load_json.sh
Stream Load 是同步导入,命令返回 Status: Success 即表示数据已可见。
注意事项
- 生产环境建议使用程序 (Java/Python/Go SDK) 封装 Stream Load。
- 对于 Kafka 数据源,StarRocks 提供了 Routine Load 功能(配置 SQL 任务即可持续消费 Kafka)。
sql
-- Phase 3: 数据导入
-- 01_prepare_table.sql
USE learn_starrocks;
CREATE TABLE IF NOT EXISTS stream_load_demo (
id INT,
name VARCHAR(50),
event_date DATE
)
ENGINE=OLAP
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 3
PROPERTIES (
"replication_num" = "1"
);
bash
#!/bin/bash
# Phase 3: Stream Load (CSV)
# 02_stream_load_csv.sh
# 确保表已创建 (执行 01_prepare_table.sql)
echo "Loading CSV data into stream_load_demo..."
# 参数说明:
# -H "column_separator:," : 指定CSV分隔符
# -H "columns: id, name, event_date" : 指定CSV列对应的表字段顺序
# -T data.csv : 要上传的文件
curl --location-trusted -u root: \
-H "label:csv_load_$(date +%s)" \
-H "column_separator:," \
-H "columns: id, name, event_date" \
-T data.csv \
http://127.0.0.1:8030/api/learn_starrocks/stream_load_demo/_stream_load
echo -e "\nDone."
bash
#!/bin/bash
# Phase 3: Stream Load (JSON)
# 03_stream_load_json.sh
# 确保表已创建
echo "Loading JSON data into stream_load_demo..."
# 参数说明:
# -H "format: json" : 指定数据格式为 JSON
# -H "jsonpaths: [\"$.id\", \"$.name\", \"$.date\"]" : (可选) 如果JSON Key和表列名不完全一致,需指定映射
curl --location-trusted -u root: \
-H "label:json_load_$(date +%s)" \
-H "format: json" \
-H "strip_outer_array: true" \
-T data.json \
http://127.0.0.1:8030/api/learn_starrocks/stream_load_demo/_stream_load
echo -e "\nDone."
CSV:
bash
1,Alice,2023-11-01
2,Bob,2023-11-01
3,Charlie,2023-11-02
JSON
bash
[
{"id": 4, "name": "David", "date": "2023-11-03"},
{"id": 5, "name": "Eve", "date": "2023-11-03"}
]