StarRocks 是什么
StarRocks 是采用向量化执行与 MPP 架构的分析型数据库,进程分两类:FE 负责元数据管理与查询规划,BE 负责数据存储与计算。数据组织提供明细、聚合、主键、更新四种表模型,兼容 MySQL 协议,可以直接用 MySQL 客户端连接。除了单表分析,它还支持物化视图、Colocate Join 与通过外部 Catalog 查询湖上数据。StarRocks 与 Apache Doris 同源,模型与语法相近但存在差异,脚本迁移时不能直接照搬。
基本信息
| 架构 | FE 负责元数据与查询规划,BE 负责存储与执行 |
|---|---|
| 表模型 | 明细、聚合、主键、更新四种 |
| 协议 | 兼容 MySQL 协议,可用 MySQL 客户端直连 |
| 加速手段 | 同步与异步物化视图、Colocate Join、前缀索引 |
| 湖上查询 | 建外部 Catalog 直接查 Hive、Iceberg、Hudi、Delta 表 |
| 建表属性 | PROPERTIES 中配置 replication_num、分桶等相关参数 |
| 同源关系 | 与 Apache Doris 同源,语法相近但有差异 |
| 副本约束 | 副本数不能超过 BE 节点数量 |
典型使用场景
- 实时看板:用主键模型承接上游 upsert 的实时数据,写入即可查询
- 明细分析:明细模型存原始明细,配合向量化扫描处理大范围过滤聚合
- 固定指标预聚合:聚合模型或异步物化视图承担高频报表查询
- 高并发点查:主键模型配合前缀索引,支撑面向用户的实时查询
- 湖上分析:建外部 Catalog 直接查 Hive 或 Iceberg 表,不复制数据
建表与外部查询
建表与外部查询
CREATE TABLE dw.dws_trade_store_day ( -- 聚合模型:导入即聚合
dt DATE NOT NULL,
store_id VARCHAR(32) NOT NULL,
order_cnt BIGINT SUM DEFAULT '0',
pay_amt DECIMAL(18,2) SUM DEFAULT '0'
)
AGGREGATE KEY(dt, store_id)
DISTRIBUTED BY HASH(store_id) BUCKETS 16
PROPERTIES ('replication_num' = '3'); -- 副本数不得超过 BE 节点数
-- 外部 Catalog:不搬数据,直接查湖表
CREATE EXTERNAL CATALOG iceberg_lake PROPERTIES (
'type' = 'iceberg',
'iceberg.catalog.type' = 'hive',
'hive.metastore.uris' = 'thrift://metastore:9083'
);
SELECT count(*) FROM iceberg_lake.demo.trade_order WHERE dt = '2026-10-12';四种模型的选择
| 模型 | 写入行为 | 典型场景 |
|---|---|---|
| 明细 Duplicate | 追加写,不去重 | 日志与明细分析 |
| 聚合 Aggregate | 按 key 聚合 | 固定维度的指标表 |
| 主键 Primary Key | 按主键覆盖,支持部分列更新 | 维表、实时明细表 |
| 更新 Update | 同主键覆盖,早期模型 | 行级更新场景,现多由主键模型替代 |
副本数必须与 BE 节点数量匹配。三副本配置在只有两台 BE 的集群上建表会直接失败,扩容或缩容时也要同步检查已建表的副本设置。
与 Doris 语法相近容易让人掉以轻心,迁移脚本时仍需逐项核对模型定义、参数名与物化视图语法,否则会返工到上线前夕。