StarRocks 快速入门

Excel 装不下的那张 CSV,就是 OLAP 引擎存在的理由。本文从一条 docker run 出发:两分钟起店,两本账(明细、主键)建表,一张 Stream Load 收据验货——全程对着官方文档核过,收据上 42 万行、1013 毫秒,每个数都手算得回来。

文本版 · 供搜索与朗读

StarRocks 快速入门

数据仓库系列 · 第十篇 · StarRocks · 快速入门

StarRocks 快速入门

Excel 装不下的那张 CSV,就是 OLAP 引擎存在的理由。本文从一条 docker run 出发:两分钟起店,两本账(明细、主键)建表,一张 Stream Load 收据验货——全程对着官方文档核过,收据上 42 万行、1013 毫秒,每个数都手算得回来。

目 录

0. 从 Excel 死掉的那一行讲起
1. 跑起来
2. 建表:先选账本,再谈语法
3. 灌数据:一张收据
4. 查询:你十年攒的 SQL 直接用
5. 慢了再看:从便宜到贵
6. 收摊前三个坑

0. 从 Excel 死掉的那一行讲起

从你八成遇过的场景讲起。一份销售流水 CSV,几百万行,双击用 Excel 打开。Excel 一张表最多 1,048,576 行——2 的 20 次方,1024 的平方,我按过计算器。你的文件比这大,后半截它装作没看见。这时你问它华东区上季度哪个 SKU 卖得最好,它答不了。

答案在它没加载的那一半里。

干这活的东西叫 OLAP 引擎:能把几亿行当几十行翻的后厨。StarRocks 是其中一家,国内团队主导,Apache 2.0 开源,说 MySQL 方言,2020 年从百度 Doris 分家出来的那一支——家史我在深研篇核过,结论就一句:同源归同源,底层早各长各的,两边没有兼容承诺。

这篇不谈架构。谈动手。

1. 跑起来

官方快速上手就一条命令:

docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -itd \
--name quickstart starrocks/allin1-ubuntu

镜像叫 starrocks/allin1-ubuntu,一只容器塞下整套最小系统:领班(FE)和灶台(BE)都在里面。要求只有两条,给 Docker 分 4 GB 内存、10 GB 磁盘。4 GB 是十年前主流笔记本的配置。给它。

文档当前标注的最新版本是 4.1,教程镜像跟着版本走。

连进去。容器自带 mysql 客户端:

docker exec -it quickstart \
mysql -P 9030 -h 127.0.0.1 -u root

9030 是 MySQL 协议端口。DBeaver、Navicat、你程序里那个 MySQL 驱动,指过来就能用。建个库:

CREATE DATABASE IF NOT EXISTS quickstart;
USE quickstart;

系统活了。两分钟。

2. 建表:先选账本,再谈语法

建表语法五分钟就会。动手前真正要想清楚的是账本类型。四种表模型,入门记住两本就够用:

明细(Duplicate):来一行记一行,永不合并。原始流水、审计底表用它。拿不准就选它,这是默认答案。
主键(Primary Key):同主键,新行盖旧行。实时更新的库存、订单状态用它。代价明摆着——主键索引常驻内存,主键要短,整型代理键最好,长字符串拼键会把内存吃穿。

剩下两本:Aggregate 是预汇总账,翻得快,明细丢;Unique 是老式覆盖账,查的时候才合并新旧,慢,2026 年建新表没理由选它,认识一下就行。

建一张明细表:

CREATE TABLE sales (
dt DATETIME,
dealer_id INT,
sku_id INT,
qty INT,
amount DECIMAL(18,2)
)
DUPLICATE KEY(dt, dealer_id, sku_id)
DISTRIBUTED BY HASH(dealer_id) BUCKETS 4
PROPERTIES ("replication_num" = "1");

三处盯住:

DUPLICATE KEY 兼任排序键。常按哪列过滤,哪列放最前。这是这张表第一个性能开关,建表时定,事后难改。
DISTRIBUTED BY HASH(dealer_id) 把数据散进四个桶:多桶多灶同时开火,同一个经销商永远落同一个桶。
replication_num = 1 是单机玩具的配置。生产三副本起步,这条别带上线。

3. 灌数据:一张收据

装货走 HTTP,叫 Stream Load。命令在宿主机 shell 跑,别在 mysql 里:

curl --location-trusted -u root \
-T ./sales.csv \
-H "label:sales-0" \
-H "column_separator:," \
-H "skip_header:1" \
-XPUT http://localhost:8030/api/quickstart/sales/_stream_load

它回你一张 JSON 收据。官方教程那份我抄来核过:42 万行、96 MB、LoadTimeMs 1013。除一下,96227746 字节除以 1.013 秒,每秒约 9500 万字节——一台 4 GB 的玩具容器,吞 CSV 每秒近百兆。对。

收据看三处:"Status": "Success";NumberLoadedRows 与 NumberTotalRows 对不对得上;错了去 ErrorURL,哪一行第几列格式坏了,写在那里。装货失败不玩玄学,它把证据递给你。

4. 查询:你十年攒的 SQL 直接用

SELECT dealer_id, SUM(qty) AS total_qty
FROM sales
WHERE dt >= '2026-07-01'
GROUP BY dealer_id
ORDER BY total_qty DESC
LIMIT 10;

普通 SQL。JOIN、窗口函数、CTE 都在,方言跟 MySQL 一族。你十年攒下的手艺直接平移——别的引擎入门先背一套新话法,这里连这步都省了,算是它对新手最友好的一面。

5. 慢了再看:从便宜到贵

报表慢了,按这个次序查,别一上来就加机器:

排序键命中没有——查询按 dt 过滤、排序键第一个是 dt,前缀索引就吃到了;
分区——按天或按月切表,查三季度只翻三季度的账,到期数据 TTL 自动清;
分桶——桶太少,灶台没全开,并行度不足;
物化视图——高频报表做成预制菜,查询自动改写,厨房直接端现成的,你察觉不到。

每一步动手前先看 profile。一条查询的体检报告,每一步耗时列得明明白白。调优是读报告。

玄学留给别人。

6. 收摊前三个坑

主键表主键要短。索引常驻内存,长字符串拼键,大表能把节点内存吃穿。
"最新库存"和"上月底库存"是两张表。主键表只答最新态,按日历史另存快照。这是数仓纪律,引擎不替你守。
allin1 是玩具。容器里面几个进程怎么编排的,我没拆开看过,不敢替它打包票——生产部署 FE、BE 各三节点起步,那是深研篇的领土。

入门就这些。一条命令起店,两本账开张,一张收据验货。明天把你那份 Excel 打不开的 CSV 灌进去,问它一个 Excel 答不了的问题。

缩写卡住的,翻《StarRocks 名词解释》;架构与选型的深水区,在《StarRocks MPP 引擎深度研究》。

深度研究 · 编译:智柴 · 2026-09-10 · 源文件:StarRocks快速入门_2026-09-10.md
#StarRocks #快速入门 #OLAP #Docker #数仓 #智柴

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens