StarRocks是一种兼容MySQL语法, 自带对JSON, ARRAY等格式支持的数据库.
StarRocks是一款专为 大规模实时分析 设计的MPP (大规模并行处理) 数据库, 支持高并发查询, 复杂多维分析及实时数据更新. 它兼容MySQL协议和SQL语法, 用户可以直接使用MySQL客户端或BI工具 (如Tableau) 连接, 迁移成本极低.
与MySQL的核心差异:
JSON作为半结构化数据的代表, 在以下场景中优势明显:
示例场景:
以自动驾驶为例, 同一帧的数据中目标物的信息就可以存为一个 ARRAY
, 数组中的每个元素都是一个目标物. 目标物的属性标签是不固定的, 随着业务发展可能增添更多信息, 如heading, yaw, pos, labels, 等.
->
符号和 $[0]
索引) .CREATE TABLE user_behavior (
user_id BIGINT,
event_time DATETIME,
-- 存储JSON数组, 每个元素包含事件类型和属性
events ARRAY<JSON>
)
PRIMARY KEY (user_id)
DISTRIBUTED BY HASH(user_id);
需求: 查询所有触发过“购物车添加”事件的用户.
SELECT user_id
FROM user_behavior
WHERE array_contains(events, json_parse('{"type": "add_to_cart"}'));
array_contains
: 判断数组是否包含指定JSON元素.json_parse
: 将字符串转为JSON类型, 避免类型不匹配.需求: 统计用户最近一次浏览页面的停留时间.
SELECT
user_id,
-- 使用 -> 提取JSON字段, 并用 CAST 转换类型
CAST(events[1]->'duration' AS INT) AS last_duration
FROM user_behavior
WHERE events[1]->'type' = 'page_view';
->
符号: 访问JSON对象中的字段.CAST
: 将JSON中的字符串值转为数值类型.需求: 分析所有事件的类型分布.
SELECT
user_id,
event->'type' AS event_type,
COUNT(*) AS count
FROM user_behavior, unnest(events) AS event
GROUP BY event_type;
unnest
: 将数组展开为多行, 便于聚合分析.$
索引)需求: 筛选订单中第一个商品价格超过100元的记录.
SELECT order_id
FROM orders
WHERE CAST(products->'$[0].price' AS DECIMAL) > 100;
$[0]
: 通过索引访问数组中的第一个元素.event_type
) 创建表达式索引.->
按需提取字段, 而非解析整个JSON.StarRocks通过兼容MySQL语法和提供丰富的JSON处理函数 (如 array_contains
, unnest
) , 显著简化了半结构化数据的分析流程. 结合其MPP架构的高性能特性, 能够优雅应对用户行为分析, 实时日志处理等复杂场景. 建议开发者通过实际业务需求逐步探索更高级的JSON操作 (如递归解析) , 并关注官方文档中的最新功能更新.
扩展阅读
- StarRocks JSON类型官方文档