快速创建StarRocks集群并进行实时数据分析
StarRocks是新一代极速全场景MPP(Massively Parallel Processing)数据库。StarRocks的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用StarRocks来支持多种数据分析场景的极速分析。
操作场景
假设某电商平台,需要实时分析用户订单行为,包括:
- 记录用户订单数据(用户ID、订单时间、金额、商品类别)。
- 快速查询特定时间段内的订单金额、热门商品类别。
表1 原始数据 user_id
order_time
amount
category
101
2025-02-15 10:00:00
50.99
Electronics
102
2025-02-18 10:30:00
99.99
Clothing
103
2025-02-28 17:30:06
159.99
Cosmetics
104
2025-02-17 19:30:06
20.00
Shoes
105
2025-01-01 11:30:06
99.00
Drinks
106
2025-01-20 19:30:06
199.00
Furniture
107
2025-01-03 09:30:06
50.99
Kitchen
准备工作
- 已注册华为账号并开通华为云,具体请参见注册华为账号并开通华为云,且在使用CloudTable前检查账号状态,账号不能处于欠费或冻结状态。
- 已创建虚拟私有云和子网,参见创建虚拟私有云和子网。
步骤一:购买StarRocks集群
- 登录表格存储服务控制台。
- 控制台左上角选择区域。
- 单击“集群管理”进入集群管理界面。
- 单击集群管理界面右上角的“购买集群”,进入购买集群页面配置相关参数(安全组规则配置端口请参见StarRocks安全规则组)。
- 单击“立即购买”,进入确认规格页面,确认无误,单击“完成”。
- 返回集群列表查看创建集群进度,当集群状态为“服务中”时,集群创建成功。
步骤二:准备弹性云服务
- 购买弹性云服务器,登录ECS控制台。
- 控制台左上角选择区域。
- 单击左侧的服务列表,选择“计算 > 弹性云服务器 ECS”,进入弹性云服务器管理界面。
- 单击页面右上角“购买弹性云服务器”,进入配置界面。
- 配置弹性云服务器参数:基础配置、实例、操作系统、存储备份、网络、安全组、公网访问、云服务器管理、高级配置、购买量。
- 参数配置后,勾选“协议”并单击“立即购买”。ECS创建成功后会默认开机。
具体请参见弹性云服务“自定义购买ECS”章节。
步骤三:添加安全组
- 获取本地主机IP,按键盘中“win+R”,弹出运行界面。
- 在输入框中输入“cmd”,单击“确定”,进入cmd运行窗口,
- 在命令窗口输入“ipconfig”,单击“回车”,查询本机IP。
- 登录ECS服务控制台。
- 进入“弹性云服务器 ”列表页面,单击“弹性云服务名称 > 基本信息 > 安全组名称 > 入方向规则”,进入入方向规则页面。
- 单击页面右上角的“添加规则”,弹出“添加入方向规则”页面。
- 源地址中填写步骤3中获取的本地IP地址。单击“确定”安全组添加完成。
步骤四:手动安装MySQL客户端
- 使用SSH登录工具,通过弹性IP远程登录到Linux弹性云服务器。具体登录操作步骤请参见弹性云服务器《用户指南》中的“ SSH密码方式登录”。
- 进入SSH工具的根目录。
cd /
- 在根目录中新建一个文件夹。
mkdir 文件夹名
- 登录后执行以下命令解压安装包。
cd <客户端安装包存放路径> tar -xzvf 客户端压缩包名
“<客户端安装包存放路径>”请替换为实际的客户端存放路径。
- 进入bin目录。
cd mysql-5.7.22-linux-glibc2.12-x86_64/bin/
- 然后执行下面的命令连接StarRocks集群。
./mysql -uadmin -ppassword -h集群内网地址 -P9030
- 集群内网地址:集群详情页面中集群访问地址,这里替换成您自己购买的集群的访问地址(FE节点的访问地址,都可以访问集群)。
- password为您购买集群时设置的密码,如果有特殊符号,特殊符号前面需要\进行转义,如果密码整体用单引号括起来,则特殊字符不需要转义。
- 端口:FE上的mysql server端口。
步骤五:在MySQL客户端创建数据表进行数据分析
- 创建数据库。
CREATE DATABASE ecommerce;
- 使用数据库。
USE ecommerce;
- 创建订单表user_orders(按天分区,按用户ID分桶)。
CREATE TABLE user_orders ( user_id BIGINT, order_time DATETIME, amount DECIMAL(10,2), category VARCHAR(50) ) PARTITION BY RANGE(order_time) ( PARTITION p202301 VALUES LESS THAN ('2025-02-01'), PARTITION p202302 VALUES LESS THAN ('2025-03-01') ) DISTRIBUTED BY HASH(user_id) BUCKETS 8;
- 插入数据。
INSERT INTO user_orders (user_id,order_time,amount,category) VALUES('101','2025-02-15 10:00:00','50.99','Electronics'); INSERT INTO user_orders (user_id,order_time,amount,category) VALUES('102','2025-02-18 10:30:00','99.99','clothing'); INSERT INTO user_orders (user_id,order_time,amount,category) VALUES('103','2025-02-28 17:30:06','159.99','Cosmetics'); INSERT INTO user_orders (user_id,order_time,amount,category) VALUES('104','2025-02-17 19:30:06','20.00','Shoes'); INSERT INTO user_orders (user_id,order_time,amount,category) VALUES('105','2025-01-01 11:30:06','99.00','Drinks'); INSERT INTO user_orders (user_id,order_time,amount,category) VALUES('106','2025-01-20 19:30:06','199.00','Furniture'); INSERT INTO user_orders (user_id,order_time,amount,category) VALUES('107','2025-01-03 09:30:06','150.99','Kitchen');
- 简单聚合查询2月订单总金额。
SELECT DATE(order_time) AS day, SUM(amount) AS total_amount, category FROM user_orders WHERE order_time >= '2025-02-01' GROUP BY day, category ORDER BY total_amount DESC;
结果示例:
+------------+--------------+-------------+ | day | total_amount | category | +------------+--------------+-------------+ | 2025-02-28 | 159.99 | Cosmetics | | 2025-02-18 | 99.99 | clothing | | 2025-02-15 | 50.99 | Electronics | | 2025-02-17 | 20.00 | Shoes | +------------+--------------+-------------+ 4 rows in set (0.16 sec)