StarRocks 安装部署

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/#%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%90%AF%E5%8A%A8-leader-fe-%E8%8A%82%E7%82%B9


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镜像已无法下载,尝试国内的:
https://docker.aityp.com/
搜索 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树的最大深度(力扣104)

所谓二叉树的最大深度其实也是根节点的最大高度&#xff0c;同时也是该二叉树的高度。那么要解决这个问题&#xff0c;我们该选择哪一种遍历方式呢&#xff1f; 要获取最大高度&#xff0c;我们需要比较节点的左右子树的高度&#xff0c;取较大的那个值返回给父节点。通过不断…

dm8在Linux环境安装精简步骤说明(2024年12月更新版dm8)

dm8在Linux环境安装详细步骤 - - 2025年1月之后dm8 环境介绍1 修改操作系统资源限制2 操作系统创建用户3 操作系统配置4 数据库安装5 初始化数据库6 实例参数优化7 登录数据库配置归档与备份8 配置审计9 创建用户10 屏蔽关键字与数据库兼容模式11 jdbc连接串配置12 更多达梦数据…

kafka-保姆级配置说明(consumer)

bootstrap.servers #deserializer应该与producer保持对应 #key.deserializer #value.deserializer ##fetch请求返回时&#xff0c;至少获取的字节数&#xff0c;默认值为1 ##当数据量不足时&#xff0c;客户端请求将会阻塞 ##此值越大&#xff0c;客户端请求阻塞的时间越长&…

Spring MVC 综合案例

目录 一. 加法计算器 1. 准备工作 2. 约定前后端交互接口 需求分析 接口定义 3. 服务器端代码 4. 运行测试 二. 用户登录 1. 准备工作 2. 约定前后端交互接口 需求分析 接口定义 (1) 登录界面接口 (2) 首页接口 3. 服务器端代码 4. 运行测试 三. 留言板 1. 准备…

神经网络|(一)加权平均法,感知机和神经元

【1】引言 从这篇文章开始&#xff0c;将记述对神经网络知识的探索。相关文章都是学习过程中的感悟和理解&#xff0c;如有雷同或者南辕北辙的表述&#xff0c;请大家多多包涵。 【2】加权平均法 在数学课本和数理统计课本中&#xff0c;我们总会遇到求一组数据平均值的做法…

PostGIS笔记:PostgreSQL 数据库与用户 基础操作

数据库基础操作包括数据模型的实现、添加数据、查询数据、视图应用、创建日志规则等。我这里是在Ubuntu系统学习的数据库管理。Windows平台与Linux平台在命令上几乎无差异&#xff0c;只是说在 Windows 上虽然也能运行良好&#xff0c;但在性能、稳定性、功能扩展等方面&#x…

【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【Redis】常见面试题

什么是Redis&#xff1f; Redis 和 Memcached 有什么区别&#xff1f; 为什么用 Redis 作为 MySQL 的缓存&#xff1f; 主要是因为Redis具备高性能和高并发两种特性。 高性能&#xff1a;MySQL中数据是从磁盘读取的&#xff0c;而Redis是直接操作内存&#xff0c;速度相当快…

python学opencv|读取图像(四十二)使用cv2.add()函数实现多图像叠加

【1】引言 前序学习过程中&#xff0c;掌握了灰度图像和彩色图像的掩模操作&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 python学opencv|读取图像&#xff08;四十&#xff09;掩模&#xff1a;三…

vue3 vue2区别

Vue 3 和 Vue 2 之间存在多个方面的区别&#xff0c;以下是一些主要的差异点&#xff1a; 1. 性能改进 Vue 3&#xff1a;在性能上有显著提升&#xff0c;包括更小的包体积、更快的渲染速度和更好的内存管理。Vue 2&#xff1a;性能相对较低&#xff0c;尤其是在大型应用中。…

将 OneLake 数据索引到 Elasticsearch - 第 1 部分

作者&#xff1a;来自 Elastic Gustavo Llermaly 学习配置 OneLake&#xff0c;使用 Python 消费数据并在 Elasticsearch 中索引文档&#xff0c;然后运行语义搜索。 OneLake 是一款工具&#xff0c;可让你连接到不同的 Microsoft 数据源&#xff0c;例如 Power BI、Data Activ…

开源项目Umami网站统计MySQL8.0版本Docker+Linux安装部署教程

Umami是什么&#xff1f; Umami是一个开源项目&#xff0c;简单、快速、专注用户隐私的网站统计项目。 下面来介绍如何本地安装部署Umami项目&#xff0c;进行你的网站统计接入。特别对于首次使用docker的萌新有非常好的指导、参考和帮助作用。 Umami的github和docker镜像地…

两种交换排序算法--冒泡,快速

目录 1.冒泡排序原理 2.快速排序原理 3.冒泡代码实现 4.快速排序代码实现 1.冒泡排序原理 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;基本思想是通过反复交换相邻的元素&#xff0c;直到整个序列有序。它的名字来源于较大的元素像气泡…

Java程序基础⑪Java的异常体系和使用

目录 1. 异常的概念和分类 1.1 异常的概念 1.2 异常的分类 2. 异常的体系结构 3. 异常的处理 3.1 异常的抛出 3.2 异常的捕获与处理 3.3 异常的处理流程 4. 自定义异常类 4.1 自定义异常类的规则 4.2 自定义异常案例 1. 异常的概念和分类 1.1 异常的概念 在Java中&…

大话特征工程:1.维数灾难与特征轮回

一、维度深渊 公元 2147 年&#xff0c;人类文明进入了数据驱动的超级智能时代。从金融到医疗&#xff0c;从教育到娱乐&#xff0c;所有决策都仰赖“全维计算网络”&#xff08;高维特征空间&#xff09;。这套系统将全球所有信息抽象成数以亿计的多维特征&#xff08…

在docker上部署nacos

一、首先下载nacos的docker镜像 docker pull nacos:2.5.0 二、然后下载nacos的安装包&#xff0c;这里是为了拿到他的配置文件。下载完解压缩后&#xff0c;以备后用 https://download.nacos.io/nacos-server/nacos-server-2.5.0.zip?spm5238cd80.6a33be36.0.0.2eb81e5d7mQ…

libOnvif通过组播不能发现相机

使用libOnvif库OnvifDiscoveryClient类&#xff0c; auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误&#xff1a; end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…

关于 SR-IOV 架构论文的总结文章

关于 SR-IOV 架构论文的总结文章 在计算机虚拟化技术不断发展的进程中,SR - IOV 架构凭借其在提升 I/O 性能、优化资源利用等方面的优势,成为众多研究关注的焦点。通过对 4 篇相关论文的研读,我们可以从多个维度深入了解 SR - IOV 架构的核心要点。 一、SR - IOV 架构的原…

kotlin内联函数——let,run,apply,also,with的区别

一、概述 为了帮助您根据使用场景选择合适的作用域函数&#xff08;scope function&#xff09;&#xff0c;我们将对它们进行详细描述并提供使用建议。从技术上讲&#xff0c;许多情况下范围函数是可以互换使用的&#xff0c;因此示例中展示了使用它们的约定俗成的做法。 1.…

JVM常见知识点

在《深入理解Java虚拟机》一书中&#xff0c;介绍了JVM的相关特性。 1、JVM的内存区域划分 在真实的操作系统中&#xff0c;对于地址空间进行了分区域的设计&#xff0c;由于JVM是仿照真实的机器进行设计的&#xff0c;那么也进行了分区域的设计。核心区域有四个&#xff0c;…