StarRocks 安装部署
StarRocks端口:
官方《配置检查》有服务端口详细描述:
https://docs.starrocks.io/zh/docs/deployment/environment_configurations/
StarRocks架构:https://docs.starrocks.io/zh/docs/introduction/Architecture/
StarRocks存算一体架构部署模式:FE + BE 节点
StarRocks存算分离架构部署模式:FE + CN(BE被CN取代)
StarRocks节点/角色:
FE:
FE Frontend 简称 FE,是 StarRocks 的前端节点,负责元数据管理、客户端连接管理、查询规划和查询调度。每个 FE 在其内存中存储和维护一份完整的元数据副本,保证 FE 之间服务的一致性。
FE 分为 Leader FE 节点、Follower 节点和 Observer 节点。Follower 节点可以根据类似 Paxos 的 BDB JE(Berkeley DB Java Edition)协议选举主节点。
FE 端口:
8030:FE HTTP Server 端口(http_port)
9020:FE Thrift Server 端口(rpc_port)
9030:FE MySQL Server 端口(query_port)
9010:FE 内部通讯端口(edit_log_port)
6090:FE 云原生元数据服务 RPC 监听端口(cloud_native_meta_port)
注意:如需在集群中部署多个 FE 节点,您必须为所有 FE 节点分配相同的 http_port。官方文档有这个要求:https://docs.starrocks.io/zh/docs/deployment/deploy_manually/#第一步启动-leader-fe-节点
BE/CN:
BE:Backend 简称 BE,是 StarRocks 的后端节点,该节点在存算一体集群中负责数据存储和执行查询。
数据存储:BE 具有等效的数据存储能力。FE 根据预定义规则将数据分发到各个 BE。BE 转换导入的数据,将数据写入所需格式,并为数据生成索引。
SQL 执行:FE 根据查询的语义将每个 SQL 查询解析为逻辑执行计划,然后将逻辑计划转换为可以在 BE 上执行的物理执行计划。BE 在本地存储数据以及执行查询,避免了数据传输和复制,极大地提高了查询性能。存算分离。
CN:Compute Node,计算节点,该节点在存算分离或存算一体集群中负责执行查询。
BE/CN 端口:
9060:BE/CN Thrift Server 端口(be_port)
8040:BE/CN HTTP Server 端口(be_http_port)
9050:BE/CN 心跳服务端口(heartbeat_service_port)
8060:BE/CN bRPC 端口(brpc_port)
9070:BE/CN 的额外 Agent 服务端口。(starlet_port)
Broker:和外部HDFS/对象存储等外部数据对接的中转服务,辅助提供导入导出功能。
安装之前先检查是否有端口冲突(FE & BE/CN):
netstat -an |grep -E "8030|9020|9030|9010|6090"
netstat -an |grep -E "9060|8040|9050|8060|9070"
docker方式安装ClickHouse
部署官方介绍:
https://docs.starrocks.io/zh/docs/deployment/prepare_deployment_files/
内有安装包部署和docker部署方式的详细介绍。
关于starrocks的docker镜像:
从 v3.1.14、v3.2.10 和 v3.3.3 版本开始,StarRocks 提供的 Docker 镜像命名格式为 starrocks/{Component}-{OS}:{Version},其中 Component 表示镜像的组件(包括 fe、be和 cn),OS 表示操作系统(包括 centos 和 ubuntu),Version 表示版本号(例如 3.3.3)。Docker 将自动识别您的 CPU 架构并拉取相应的镜像。请确保您选择了正确版本的镜像。
在 v3.1.14、v3.2.10 和 v3.3.3 版本之前,StarRocks 提供的 Docker 镜像位于 starrocks/artifacts-ubuntu 和 starrocks/artifacts-centos7 仓库中。
下载指定tag的对应版本镜像:
docker pull starrocks/<Component>-<OS>:<version>
运行/启动docker容器:
docker run --rm starrocks/<Component>-<OS>:<version> tar -cf - -C /release . | tar -xvf -
我准备部署存算一体(需要部署FE+BE节点):
docker pull starrocks/fe-centos:3.3.3
docker pull starrocks/be-centos:3.3.3
国外的docker镜像已无法下载,尝试国内的:
搜索 starrocks
如果节点分开部署,则按需下载镜像:
docker.io/starrocks/fe-ubuntu:3.3-latest
docker.io/starrocks/be-ubuntu:3.3-latest
docker.io/starrocks/cn-ubuntu:3.3-latest
我直接下载allin1镜像:docker.io/starrocks/allin1-ubuntu:3.3.2
详情:https://docker.aityp.com/image/docker.io/starrocks/allin1-ubuntu:3.3.2
执行 docker pull 下载镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/starrocks/allin1-ubuntu:3.3.2
为了使用方便重新打个 tag
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/starrocks/allin1-ubuntu:3.3.2 starrocks/starrocks-allin1:3.3.2
查看镜像元数据
docker inspect starrocks/starrocks-allin1:3.3.2
运行/启动docker容器:
docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -itd --name starrocks starrocks/starrocks-allin1:3.3.2
如果要映射 BE/CN Thrift Server 端口则执行:
docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -p 9060:9060 -itd --name starrocks starrocks/starrocks-allin1:3.3.2
StarRocks用户权限管理
参考:https://docs.starrocks.io/zh/docs/administration/user_privs/privilege_overview/
用户是可以被授权的实体,权限和角色均可以被赋予给用户。用户拥有的最大权限合集为自身权限与所拥有角色权限的并集。StarRocks 保证每个用户只能执行被授权的操作。
StarRocks 建议您在大部分情况下使用角色来分发权限。即,根据业务场景创建角色,将权限赋予给角色后,再将角色赋予给用户。
系统预置角色有:
root:拥有全局权限。root 用户默认拥有 root 角色。StarRocks 集群最初创建时,系统会自动生成 root 用户,该用户拥有 root 权限。由于 root 用户、角色的权限范围过大,建议您在后续使用和维护集群时创建新的用户和角色,避免直接使用此用户和角色。root 用户的密码请您妥善保管。
cluster_admin:拥有集群的管理权限。包含对节点的操作权限,如增加、减少节点。 cluster_admin 角色拥有对集群节点的上、下线权限,请妥善赋权。建议您不要将 cluster_admin 或任何包含此角色的自定义角色设置为用户的默认角色,防止因误操作而导致的节点变更。
db_admin:拥有数据库的管理权限。包含所有 CATALOG、数据库、表、视图、物化视图、函数及全局函数、资源组、插件等对象的所有操作权限。
user_admin:拥有用户和角色的管理权限。包含创建用户、角色、赋权等权限。
public:任何用户都拥有、并在任何会话下都默认激活此角色,包含新增用户。public 角色默认不拥有任何权限,您可以对此角色的权限范围进行修改。
命令行登录StarRocks数据库
进入docker容器本地连接StarRocks数据库创建用户和授权
docker exec -it starrocks /bin/bash
mysql -h127.0.0.1 -P9030 -uroot
-- DROP USER test;
-- 创建用户时不指定默认角色
-- CREATE USER test IDENTIFIED BY '1q2w3e';
-- 创建用户的同时指定默认角色(加 DEFAULT ROLE role_s)
CREATE USER test IDENTIFIED BY '1q2w3e' DEFAULT ROLE db_admin;
-- 激活角色
-- 默认激活角色
默认角色为用户提供了一道基础的权限屏障。
例如,用户 A 拥有 role_query 和 role_delete 两个角色,分别包含了查询和删除的权限。StarRocks 建议您仅将 role_query 作为默认角色,以防止误执行 DELETE 或 TRUNCATE 等高危操作而导致数据丢失。
当您确认需要执行上述操作时,可以在手动设置激活角色后执行。
当用户没有默认角色时,在登录集群后自动激活系统预置的 public 角色。
激活默认角色可以通过 CREATE USER 的 DEFAULT ROLE 关键字进行设置,例如:
CREATE USER test IDENTIFIED BY '1q2w3e' DEFAULT ROLE db_admin;
也可以在后续通过 ALTER USER 进行更改,同时也可以通过 SET DEFAULT ROLE 更改。
-- 手动激活角色
除了默认角色,用户也可以在会话内手动选择激活一个或多个已拥有的角色。您可以通过 SHOW GRANTS 命令查看当前用户拥有的权限和可以激活的角色,并通过 SET ROLE 命令来设置当前的激活角色,生效范围为当前会话。
SET ROLE 命令是覆盖的。例如,用户登录时是默认激活了 default_role,执行 SET ROLE role_s之后,用户此时拥有的是 role_s 的权限和自身权限。
mysql> exit;
重新以新用户登录
mysql -h127.0.0.1 -P9030 -utest -p
-- 查看当前用户拥有的权限和可以激活的角色
SHOW GRANTS;
mysql> show grants;
+--------------+---------+--------------------------------+
| UserIdentity | Catalog | Grants |
+--------------+---------+--------------------------------+
| 'test'@'%' | NULL | GRANT 'db_admin' TO 'test'@'%' |
+--------------+---------+--------------------------------+
-- 查询当前登录会话的角色
-- SELECT CURRENT_ROLE();
mysql> SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| db_admin |
+----------------+
如果当前角色为空的话,会提示相关操作无权限,需要手动激活权限 SET ROLE role_s,会话级生效。
-- 如果要修改用户的默认角色
-- SET DEFAULT ROLE role_xxx
创建测试数据库 testdb 和测试表 test01
-- 创建数据库
CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
-- 创建表(主键表)
DROP TABLE IF EXISTS test01;
CREATE TABLE IF NOT EXISTS test01 (
id INT NOT NULL,
info STRING,
cnt INT,
uptime DATETIME
)
PRIMARY KEY (id)
DISTRIBUTED BY HASH (id)
;
-- 创建表-明细表(建表不指定属性默认为无主键表/明细表)
DROP TABLE IF EXISTS test02;
CREATE TABLE IF NOT EXISTS test02 (
id INT,
info STRING,
cnt INT,
uptime DATETIME
);
-- INSERT导入时不指定作业LABLE会自动生成LABLE
INSERT INTO test01 (id,info,cnt,uptime) VALUES (1,'aaa',100,'2024-11-10 08:30:21.111222'),(2,'bbb',102,'2024-11-11 08:35:58.333444');
-- INSERT导入时指定作业LABLE
INSERT INTO test01 WITH LABEL test01_002 (id,info,cnt,uptime) VALUES (1,'aaa',100,'2024-11-10 08:30:21.111222'),(2,'bbb',102,'2024-11-11 08:35:58.333444');
-- 查看INSERT导入作业结果
SHOW LOAD WHERE label="test01_002";
-- 覆盖写(覆盖目的表数据)
INSERT OVERWRITE test01 (id,info,cnt,uptime) VALUES (1,'aaa',100,'2024-11-10 08:30:21.111222'),(2,'bbb',102,'2024-11-11 08:35:58.333444');
-- INSERT OVERWRITE test01 WITH LABEL test01_005 (id,info,cnt,uptime) VALUES (1,'aaa',100,'2024-11-10 08:30:21.111222'),(2,'bbb',102,'2024-11-11 08:35:58.333444');
-- SHOW LOAD WHERE label="test01_005";
-- 清空表
TRUNCATE TABLE test01;
TRUNCATE TABLE test02;
查询数据:可通过 MySQL Client、DBeaver等 SQL 客户端工具连接 StarRocks 进行数据查询
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "select version();"
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "select * from test01;"
-- 指定 catalog.db.table 格式
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "select * from default_catalog.testdb.test01;"
-- Stream Load 导入数据
Stream Load导入详细介绍可参考官方资料:https://docs.starrocks.io/zh/docs/sql-reference/sql-statements/loading_unloading/STREAM_LOAD/
Stream Load语法:
curl --location-trusted -u <username>:<password> -XPUT <url>
(
data_desc
)
[opt_properties]
curl StreamLoad 参数说明:
--location-trusted
此参数用于允许 curl 将认证凭据传输给任何重定向的 URL。
-u root
用于登录 StarRocks 的用户名。指定密码格式为 -u root:pwd,无密码格式为 -u root:
data_desc: 用于描述源数据文件,包括源数据文件的名称、格式、列分隔符、行分隔符、目标分区、以及与 StarRocks 表之间的列对应关系等。data_desc 中的参数可以分为三类:公共参数、CSV 适用的参数、以及 JSON 适用的参数。
opt_properties: 用于指定一些导入相关的可选参数。指定的参数设置作用于整个导入作业。
data_desc & opt_properties 详细介绍参考官网:https://docs.starrocks.io/zh/docs/sql-reference/sql-statements/loading_unloading/STREAM_LOAD/
-T filename
T 代表传输(Transfer),用于指定需要传输的文件名。
-H 设置 header 参数:
label:crashdata-0
与此 Stream Load 作业关联的标签。标签必须唯一,因此如果多次运行作业,您可以添加一个数字保持递增。
where: <condition1>[, <condition2>, ...] 可选参数,用于指定过滤条件。如果指定该参数,StarRocks 会按照指定的过滤条件对转换后的数据进行过滤。只有符合 WHERE 子句中指定的过滤条件的数据才会导入。
column_separator:,
如果导入的文件使用单个 , 作为列分隔符,则设置如上所示。如果使用其他分隔符,则在此处设置该分隔符。常见分隔符包括 \t、, 和 |。
skip_header:1
某些 CSV 文件会在首行(Header)记录所有的列名,还有些会在第二行记录所有列的数据类型信息。如果 CSV 文件有一或两个 Header 行,需要将 skip_header 设置为 1 或 2。如果您使用的 CSV 没有 Header 行,请将其设置为 0。
enclose:\"
如果某些字段包含带有逗号的字符串,则需要用双引号括起该字段。本教程使用的示例数据集中,地理位置信息包含逗号,因此需将 enclose 设置为 \",其中 \ 用于转义 "。
max_filter_ratio:1
导入数据中允许出现错误行的比例,范围 0~1,默认值为 0。理想情况下,应将其设置为 0,即当导入的数据中有任意一行出现错误时,导入作业会失败。本教程中需要将其设置为 1,即在调试过程中,允许所有数据行出现错误。
timeout: 可选参数。用于导入作业的超时时间。取值范围:1 ~ 259200。单位:秒。默认值:600。除了 timeout 参数可以控制该导入作业的超时时间外,您还可以通过 FE 配置参数 stream_load_default_timeout_second 来统一控制 Stream Load 导入作业的超时时间。如果指定了timeout 参数,则该导入作业的超时时间以 timeout 参数为准;如果没有指定 timeout 参数,则该导入作业的超时时间以stream_load_default_timeout_second 为准。
strict_mode:
可选参数。用于指定是否开严格模式。取值范围:true 和 false。默认值:false。true 表示开启,false 表示关闭。
关于该模式的介绍,参见 严格模式(https://docs.starrocks.io/zh/docs/loading/load_concept/strict_mode/)
如果开启严格模式,StarRocks 会把错误的数据行过滤掉,只导入正确的数据行,并返回错误数据详情。
如果关闭严格模式,StarRocks 会把转换失败的错误字段转换成 NULL 值,并把这些包含 NULL 值的错误数据行跟正确的数据行一起导入。
实际导入过程中,正确的数据行和错误的数据行都有可能存在 NULL 值。如果目标列不允许 NULL 值,则 StarRocks 会报错,并把这些包含 NULL 值的数据行过滤掉。
对于 Stream Load、Broker Load、Routine Load 和 Spark Load,导入作业能够容忍的因数据质量不合格而过滤掉的错误数据行所占的最大比例,由作业的可选参数 max_filter_ratio 控制。INSERT 导入方式当前不支持 max_filter_ratio 参数。
不同导入方式 strict_mode 默认值不同:
使用 Stream Load、Broker Load、Routine Load 和 Spark Load 执行数据导入时,需要通过参数 strict_mode 来设置严格模式。参数取值范围:true 和 false。默认值:false。true 表示开启,false 表示关闭。
使用 INSERT 执行数据导入时,需要通过会话变量 enable_insert_strict 来设置严格模式。变量取值范围:true 和 false。默认值:true。true 表示开启,false 表示关闭。
columns:
此参数用于将 CSV 文件中的列映射到 StarRocks 表中的列。当前教程中使用的 CSV 文件中有大量的列,而 StarRocks 表中的列经过裁剪,仅保留部分列。未包含在表中的列在导入过程中都将被跳过。
注意:
columns 参数支持数据转换逻辑,在 CSV 文件中经常会有不符合标准的日期和时间,导入时可以指定数据转换逻辑、将日期和时间数据转换为 DATETIME 类型的逻辑。
例如:如果数据集中的日期是以 MM/DD/YYYY 为格式(CRASH_DATE 列)、时间以 HH:MI 为格式(CRASH_TIME)的2个单独的列:
08/05/2014,9:10,BRONX,10469,40.8733019,-73.8536375,"(40.8733019, -73.8536375)",
由于 StarRocks 中的 DATETIME 格式为 YYYY-MM-DD HH:MI:SS,因此需要转换数据集中的数据,将两列数据合并成一列、并以空格分隔。则此处 columns: 参数应为:
-H "columns:tmp_CRASH_DATE, tmp_CRASH_TIME, CRASH_DATE=str_to_date(concat_ws(' ', tmp_CRASH_DATE, tmp_CRASH_TIME), '%m/%d/%Y %H:%i')
说明:
通过设置以上参数可实现以下目标:
将 CSV 文件的第一列内容分配给 tmp_CRASH_DATE 列;
将 CSV 文件的第二列内容分配给 tmp_CRASH_TIME 列;
通过 concat_ws() 函数,使用空格将 tmp_CRASH_DATE 列和 tmp_CRASH_TIME 列连接在一起;
通过 str_to_date() 函数使用连接后的字符串生成 DATETIME 数据;
将生成的 DATETIME 数据存储在列 CRASH_DATE 中。
timezone: 可选参数。用于指定导入作业所使用的时区。默认为东八区 (Asia/Shanghai)。该参数的取值会影响所有导入涉及的、跟时区设置有关的函数所返回的结果。受时区影响的函数有 strftime、alignment_timestamp 和 from_unixtime 等,具体请参见设置时区。导入参数 timezone 设置的时区对应"设置时区"中所述的会话级时区。
load_mem_limit: 可选参数。导入作业的内存限制,最大不超过 BE(或 CN)的内存限制。单位:字节。默认内存限制为 2 GB。
partial_update: 可选参数。部分更新。是否使用部分列更新。取值包括 TRUE 和 FALSE。默认值:FALSE。
partial_update_mode: 部分更新模式。
可选参数。指定部分更新的模式,取值包括 row 和 column:
row:默认值,指定使用行模式执行部分更新,比较适用于较多列且小批量的实时更新场景。
column:指定使用列模式执行部分更新,比较适用于少数列并且大量行的批处理更新场景。在该场景,开启列模式,更新速度更快。例如,在一个包含 100 列的表中,每次更新 10 列(占比 10%)并更新所有行,则开启列模式,更新性能将提高 10 倍。
merge_condition: 可选参数。
用于指定作为更新生效条件的列名。这样只有当导入的数据中该列的值大于等于当前值的时候,更新才会生效。StarRocks v2.5 起支持条件更新。参见通过导入实现数据变更。
详情参考:https://docs.starrocks.io/zh/docs/loading/Load_to_Primary_Key_tables/
注意:指定的列必须为非主键列,且仅主键表支持条件更新。
StarRocks 的主键表支持通过 Stream Load、Broker Load 或 Routine Load 导入作业,对 StarRocks 表进行数据变更,包括插入、更新和删除数据。不支持通过 Spark Load 导入作业或 INSERT 语句对 StarRocks 表进行数据变更。
StarRocks 还支持部分更新 (Partial Update) 和条件更新 (Conditional Update)。
StarRocks 的主键表目前支持 UPSERT 和 DELETE 操作,不支持区分 INSERT 和 UPDATE 操作。
在创建导入作业时,StarRocks 支持在导入作业的创建语句或命令中添加 __op 字段,用于指定操作类型。
不同的导入方式,定义 __op 字段的方法也不相同:
如果使用 Stream Load 导入方式,需要通过 columns 参数来定义 __op 字段。
如果使用 Broker Load 导入方式,需要通过 SET 子句来定义 __op 字段。
如果使用 Routine Load 导入方式,需要通过 COLUMNS 参数来定义 __op 字段。
根据要做的数据变更操作,您可以选择添加或者不添加 __op 字段。不添加 __op 字段的话,默认为 UPSERT 操作。
主要涉及的数据变更操作场景如下:
1)当数据文件只涉及 UPSERT 操作时,可以不添加 __op 字段。
2)当数据文件只涉及 DELETE 操作时,必须添加 __op 字段,并且指定操作类型为 DELETE。
3)当数据文件中同时包含 UPSERT 和 DELETE 操作时,必须添加 __op 字段,并且确保数据文件中包含一个代表操作类型的列,取值为 0 或 1。其中,取值为 0 时代表 UPSERT 操作,取值为 1 时代表 DELETE 操作。
使用说明:
1)必须确保待导入的数据文件中每一行的列数都相同。
2)所更新的列必须包含主键列。
-XPUT: 指定 HTTP 请求方法。必选参数。Stream Load 当前只支持 PUT 方法。
url: 用于指定 StarRocks 表的 URL 地址。必选参数。格式为 http://<fe_host>:<fe_http_port>/api/<database_name>/<table_name>/_stream_load
您可以通过 SHOW frontends 命令查看 FE 节点的 IP 地址和 HTTP 端口号,例如:mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW frontends;"
查看 FE 节点的信息:
mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW PROC '/frontends';"
或者
mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW frontends;"
Enter password:
+------------------------------+-----------+-------------+----------+-----------+---------+--------+------------+------+-------+-------------------+---------------------+----------+--------+---------------------+---------------+
| Name | IP | EditLogPort | HttpPort | QueryPort | RpcPort | Role | ClusterId | Join | Alive | ReplayedJournalId | LastHeartbeat | IsHelper | ErrMsg | StartTime | Version |
+------------------------------+-----------+-------------+----------+-----------+---------+--------+------------+------+-------+-------------------+---------------------+----------+--------+---------------------+---------------+
| 127.0.0.1_9010_1731988679963 | 127.0.0.1 | 9010 | 8030 | 9030 | 9020 | LEADER | 1134139963 | true | true | 180649 | 2025-01-08 08:33:14 | true | | 2025-01-06 07:34:32 | 3.3.2-857dd73 |
+------------------------------+-----------+-------------+----------+-----------+---------+--------+------------+------+-------+-------------------+---------------------+----------+--------+---------------------+---------------+
查看 BE 节点的信息:
mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW PROC '/backends';"
或者
mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW backends;"
+-----------+-----------+---------------+--------+----------+----------+---------------------+---------------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------+---------------+--------------------------------------------------------+-------------------+-------------+----------+-------------------+------------+------------+---------------------------------------------------+----------+
| BackendId | IP | HeartbeatPort | BePort | HttpPort | BrpcPort | LastStartTime | LastHeartbeat | Alive | SystemDecommissioned | ClusterDecommissioned | TabletNum | DataUsedCapacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | ErrMsg | Version | Status | DataTotalCapacity | DataUsedPct | CpuCores | NumRunningQueries | MemUsedPct | CpuUsedPct | DataCacheMetrics | Location |
+-----------+-----------+---------------+--------+----------+----------+---------------------+---------------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------+---------------+--------------------------------------------------------+-------------------+-------------+----------+-------------------+------------+------------+---------------------------------------------------+----------+
| 10001 | 127.0.0.1 | 9050 | 9060 | 8040 | 8060 | 2025-01-06 07:34:36 | 2025-01-08 08:32:04 | true | false | false | 87 | 100.417 MB | 20.218 GB | 91.651 GB | 77.94 % | 77.94 % | | 3.3.2-857dd73 | {"lastSuccessReportTabletsTime":"2025-01-08 08:31:07"} | 20.316 GB | 0.48 % | 8 | 0 | 2.17 % | 0.0 % | Status: Normal, DiskUsage: 0B/0B, MemUsage: 0B/0B | |
+-----------+-----------+---------------+--------+----------+----------+---------------------+---------------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------+---------------+--------------------------------------------------------+-------------------+-------------+----------+-------------------+------------+------------+---------------------------------------------------+----------+
查看 Broker 节点信息:
mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW PROC '/brokers';"
+--------------+-----------+------+-------+---------------------+---------------------+--------+
| Name | IP | Port | Alive | LastStartTime | LastUpdateTime | ErrMsg |
+--------------+-----------+------+-------+---------------------+---------------------+--------+
| allin1broker | 127.0.0.1 | 8000 | true | 2025-01-06 07:34:41 | 2025-01-08 08:44:04 | |
+--------------+-----------+------+-------+---------------------+---------------------+--------+
-- Stream Load 导入数据示例
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "TRUNCATE TABLE test01;"
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "SELECT * FROM test01;"
-- 从本地文件导入数据--UPSET(不指定__op、则默认UPSET)
-- StarRocks 的 Stream Load 导入方式需要使用 curl 命令,涉及许多参数
echo '1,"aaa",100,"2024-11-10 08:30:21.111222"
2,"bbb",102,"2024-11-11 08:35:58.333444"' > test01.csv
curl --location-trusted -u test:1q2w3e \
-T ./test01.csv \
-H "label:test01_001" \
-H "column_separator:," \
-H "skip_header:0" \
-H "enclose:\"" \
-H "max_filter_ratio:0" \
-H "columns:id,info,cnt,uptime" \
-XPUT http://localhost:8030/api/testdb/test01/_stream_load
-- 命令上指定用户密码方式: -u user:pwd
-- 命令上指定用户如果没有设置密码,则: -u user:
-- 命令上也可以不指定密码,等提示输入再输入密码,则:-u user
curl --location-trusted -u test \
-T ./test01.csv \
-H "label:test01_002" \
-H "column_separator:," \
-H "skip_header:0" \
-H "enclose:\"" \
-H "max_filter_ratio:0" \
-H "columns:id,info,cnt,uptime" \
-XPUT http://localhost:8030/api/testdb/test01/_stream_load
-- 导入时也可以不指定 columns(csv文件中的列数要一致):
curl --location-trusted -u test:1q2w3e \
-T ./test01.csv \
-H "label:test01_003" \
-H "column_separator:," \
-H "skip_header:0" \
-H "enclose:\"" \
-H "max_filter_ratio:0" \
-XPUT http://localhost:8030/api/testdb/test01/_stream_load
-- 从本地文件导入数据--DELETE(必须指定__op,仅主键表支持DELETE操作,无主键表不支持。如果不指定__op则默认为UPSET)
curl --location-trusted -u test:1q2w3e \
-T ./test01.csv \
-H "label:test01_004" \
-H "column_separator:," \
-H "skip_header:0" \
-H "enclose:\"" \
-H "max_filter_ratio:0" \
-H "columns:__op='delete'" \
-XPUT http://localhost:8030/api/testdb/test01/_stream_load
注意:仅主键表支持DELETE操作,如果是非主键表,上述命令执行后的效果是追加写的效果,多次执行,每次都会追加csv文件中的数据到目的表。
-- 如果csv文件数据中同时存在 UPSET 和 DELETE 的数据行,则需要在 csv 文件中包含 __op 字段、填写对应值(0 代表 UPSET;1 代表 DELETE)
-- 准备数据文件 test01_b.csv,数据中的第一列为临时列、值为0代表UPSET、1代表DELETE
echo '0,1,"aaa",100,"2024-11-10 08:30:21.111222"
1,2,"bbb",102,"2024-11-11 08:35:58.333444"' > test01_b.csv
查看准备好的csv文件内容:
root@2ce391eef088:/data/deploy/starrocks# cat test01_b.csv
0,1,"aaa",100,"2024-11-10 08:30:21.111222"
1,2,"bbb",102,"2024-11-11 08:35:58.333444"
-- 目的表 INSERT 插入数据
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "INSERT OVERWRITE test01 (id,info,cnt,uptime) VALUES (1,'aaa',100,'2024-11-10 08:30:21.111222'),(2,'bbb',102,'2024-11-11 08:35:58.333444');"
-- 查询数据
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "SELECT * FROM test01;"
root@2ce391eef088:/data/deploy/starrocks# mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "SELECT * FROM test01;"
Enter password:
+------+------+------+----------------------------+
| id | info | cnt | uptime |
+------+------+------+----------------------------+
| 2 | bbb | 102 | 2024-11-11 08:35:58.333444 |
| 1 | aaa | 100 | 2024-11-10 08:30:21.111222 |
+------+------+------+----------------------------+
-- 执行csv导入(含UPSET和DELETE)
-- -H "columns:xxx" 中指定 __op=opflag 操作列(临时列opflag),后面指定csv数据文件中对应的数据列:opflag,id,info,cnt,uptime
curl --location-trusted -u test:1q2w3e \
-T ./test01_b.csv \
-H "label:test01_005" \
-H "column_separator:," \
-H "skip_header:0" \
-H "enclose:\"" \
-H "max_filter_ratio:0" \
-H "columns:__op=opflag,opflag,id,info,cnt,uptime" \
-XPUT http://localhost:8030/api/testdb/test01/_stream_load
-- 执行结果:
root@2ce391eef088:/data/deploy/starrocks# curl --location-trusted -u test:1q2w3e \
> -T ./test01_b.csv \
> -H "label:test01_013" \
> -H "column_separator:," \
> -H "skip_header:0" \
> -H "enclose:\"" \
> -H "max_filter_ratio:0" \
> -H "columns:__op=opflag,opflag,id,info,cnt,uptime" \
> -XPUT http://localhost:8030/api/testdb/test01/_stream_load
{
"TxnId": 149,
"Label": "test01_013",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 2,
"NumberLoadedRows": 2,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 86,
"LoadTimeMs": 186,
"BeginTxnTimeMs": 0,
"StreamLoadPlanTimeMs": 2,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 58,
"CommitAndPublishTimeMs": 124
执行后的效果是更新目的表中id=1的行、删除id=2的行。
-- 查询数据
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "SELECT * FROM test01;"
root@2ce391eef088:/data/deploy/starrocks# mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "SELECT * FROM test01;"
Enter password:
+------+------+------+----------------------------+
| id | info | cnt | uptime |
+------+------+------+----------------------------+
| 1 | aaa | 100 | 2024-11-10 08:30:21.111222 |
+------+------+------+----------------------------+
导入后查询数据:
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "select * from test01;"
root@2ce391eef088:/data/deploy/starrocks# mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "select * from test01;"
Enter password:
+------+------+------+----------------------------+
| id | info | cnt | uptime |
+------+------+------+----------------------------+
| 1 | aaa | 100 | 2024-11-10 08:30:21.111222 |
| 2 | bbb | 102 | 2024-11-11 08:35:58.333444 |
| 1 | aaa | 100 | 2024-11-10 08:30:21.111222 |
| 2 | bbb | 102 | 2024-11-11 08:35:58.333444 |
+------+------+------+----------------------------+
指定数据目录(catalog)查询(格式为 catalog.db.table):
mysql -h192.168.1.250 -P9030 -utest -Dtestdb -p -e "select * from default_catalog.testdb.test01;"
数据目录(catalog)
-- 创建外部数据目录(External Catalog)
可参考:《StarRocks常用命令》中的 创建外部数据目录 介绍。
-- 查看当前集群中的所有 Catalog,包括 Internal Catalog 和 External Catalog
-- 注意:一个 StarRocks 集群中只有一个默认的 internal catalog,名为 default_catalog,不支持删除;default_catalog 也是 StarRocks 集群中唯一的 internal catalog
mysql> SHOW CATALOGS\G;
或
mysql> show catalogs;
+-----------------------+----------+------------------------------------------------------------------+
| Catalog | Type | Comment |
+-----------------------+----------+------------------------------------------------------------------+
| default_catalog | Internal | An internal catalog contains this cluster's self-managed tables. |
| jdbc01_mysql_catalog | Jdbc | NULL |
| jdbc02_pg_catalog | Jdbc | NULL |
| jdbc03_oracle_catalog | Jdbc | NULL |
+-----------------------+----------+------------------------------------------------------------------+
4 rows in set (0.00 sec)
Catalog:Catalog 名称。
Type:Catalog 类型。如果是 default_catalog,则返回 Internal。如果是 external catalog,则返回 external catalog 的类型,例如 Hive, Hudi, Iceberg。
Comment:Catalog 的备注。
1)在创建 external catalog 时不支持为 external catalog 添加备注,所以如果是 external catalog,则返回的 Comment 为 NULL。
2)如果是 default_catalog,则默认返回的 Comment 为 An internal catalog contains this cluster's self-managed tables.。default_catalog 是 StarRocks 集群中唯一的 internal catalog,不允许删除。
注意:
只有拥有 External Catalog USAGE 权限的用户才能查看到该 Catalog。如果没有该权限,仅返回 default_catalog。您可以使用 GRANT 命令进行授权操作。
StarRocks 连接方式
DBeaver连接StarRocks
DBeaver有对应的StarRocks类型,配置参数和MySQL类型参数基本相同。也可以直接用MySQL类型连接StarRocks。
数据库填写格式:catalog.database,例如:default_catalog.testdb
jdbcUrl(FE-MySQL): jdbc:mysql://y.y.y.y:9030
loadUrl(FE-HTTP): y.y.y.y:8030,y.y.y.y:8030,y.y.y.y:8030
如果用 DataX 连接 StarRocks,配置如下:
"writer": {
"name": "starrockswriter",
"parameter": {
"username": "xxxx",
"password": "xxxx",
"database": "xxxx",
"table": "xxxx",
"column": ["k1", "k2", "v1", "v2"],
"preSql": [],
"postSql": [],
"jdbcUrl": "jdbc:mysql://x.x.x.x:9030",
"loadUrl": ["y.y.y.y:8030", "y.y.y.y:8030"],
"loadProps": {}
}
}
CloudCanal:
Client地址/端口:ip/domain : 9030 +
Http地址/端口:ip/domain : 8030 +
数据库(database):catalog.testdb
认证方式(authType):账号密码
账号(user):user
密码(password):pwd
jdbcUrl(mysql)
loadUrl(http)
httpUrl
jdbcUrl
Catalog.Database
query_host:query_port 192.168.1.101:9030
http_host http_port 192.168.1.101:8030,192.168.1.102:8030,192.168.1.103:8030
=>
jdbcUrl = jdbc:mysql://192.168.1.101:9030
loadUrl = 192.168.1.101:8030,192.168.1.102:8030,192.168.1.103:8030
loadUrl = http://192.168.1.101:8030,http://192.168.1.102:8030,http://192.168.1.103:8030