本文为您介绍在StarRocks中如何使用指定的计算组。
前提条件
已创建StarRocks 3.3及以上的存算分离版实例,详情请参见创建实例。该版本目前处于白名单模式。
注意事项
目前所有的动态分区的创建、Compaction、Schema Change操作、MV刷新、统计信息收集等异步任务默认都是在default_warehouse
中进行的。所以为了保证性能和流畅的用户使用体验,建议default_warehouse
下至少配置3个计算节点。
查看所有Warehouse信息
SHOW WAREHOUSES [LIKE '<pattern>'];
Query、Load等操作使用指定计算组
如果没有明确指定Warehouse,所有的操作都默认在内置的default_warehouse
中执行。
Query操作使用指定计算组
Query只支持通过setVar方式或在当前Session中手动切换Warehouse来指定使用的Warehouse。
setVar方式指定
以指定Warehouse为test为例,
/*+SET_VAR(warehouse="test")*/
为固定写法,非注释内容。语法如下:SELECT /*+SET_VAR(warehouse="test")*/ * FROM my_db.my_table;
在当前Session中手动切换
指定使用某个Warehouse。
SET [session] warehouse [=] <warehouse_name>;
其中,
session
和=
可写可不写,不影响语义。查看当前使用的Warehouse。
SHOW variables LIKE "%warehouse%";
指定的Warehouse只在当前Session中生效。不明确指定则使用
default_warehouse
。Compaction、异步物化视图刷新、统计信息等异步任务都使用default_warehouse
。执行Query或其他SQL。
SELECT * FROM my_db.my_table;
Load操作使用指定计算组
Stream Load使用指定计算组
将Warehouse信息添加到HTTP请求的Header中。例如:
curl --location-trusted -u <username>:<password> \ -H "label:<label_name>" -H "timeout:100" -H "max_filter_ratio:1" \ -H "warehouse:<warehouse_name>" \ -T example1.csv \ -XPUT http://<fe_host>:<fe_http_port>/api/<database_name>/<table_name>/_stream_load
参数说明如下表所述。
参数名称
是否必须
参数说明
username:password
是
用于指定StarRocks集群账号的用户名和密码。如果账号没有设置密码,这里只需要传入
<username>:
,如:root:
。label
否
用于指定导入作业的标签。如果您不指定标签,StarRocks会自动为导入作业生成一个标签。相同标签的数据无法多次成功导入,这样可以避免一份数据重复导入。
timeout
否
用于导入作业的超时时间。取值范围:1~259200。单位:秒。
max_filter_ratio
否
用于指定导入作业的最大容错率,即导入作业能够容忍的因数据质量不合格而过滤掉的数据行所占的最大比例。取值范围:0~1。
warehouse
是
用于指定Stream Load使用的Warehouse。
fe_host
是
用于指定StarRocks集群中FE的内网地址。可在StarRocks集群的实例详情中查看FE内网地址。
说明如果您直接提交导入作业给某一个BE(或CN)节点,则需要传入该BE(或CN)的IP地址。
fe_http_port
是
指定StarRocks集群中FE的HTTP端口号。默认端口号为8030。
说明如果您直接提交导入作业给某一指定的BE(或CN)节点,则需要传入该BE(或CN)的HTTP端口号。默认端口号为8040。
database_name
是
指定目标StarRocks表所在的数据库的名称。
table_name
是
指定目标StarRocks表的名称。
外表事务导入使用指定计算组
在调用
/api/transaction/begin
接口开启事务时,您必须指定标签Label,并将Warehouse信息添加到HTTP请求的Header中。语法如下:curl --location-trusted -u <username>:<password> \ -H "label:<label_name>" \ -H "db:<database_name>" \ -H "table:<table_name>" \ -H "warehouse::<warehouse_name>" \ -XPOST http://<fe_host>:<fe_http_port>/api/transaction/begin
之后,在使用
/api/transaction/load
、/api/transaction/prepare
、/api/transaction/commit
接口时,必须使用与/api/transaction/begin
接口相同的标签,但不需要在HTTP请求的Header中再次指定warehouse
信息。Broker Load使用指定计算组
LOAD LABEL [<database_name>.]<label_name> ( data_desc[, data_desc ...] ) WITH BROKER ( StorageCredentialParams ) [PROPERTIES ( opt_properties ) ]
创建导入任务的语句中
opt_properties
新增 "warehouse
" 参数,默认值为当前Session的Warehouse。例如:LOAD LABEL my_db.path_extra_fields_label ( DATA INFILE( "hdfs://<hdfs_ip>:9000/starrocks_test_data/hdfs_data/*.orc") INTO TABLE `my_tbl` FORMAT AS "orc" ) WITH BROKER hdfs_broker ( "hadoop.security.authentication" = "simple", "username" = "<hdfs_username>", "password" = "<hdfs_password>" ) PROPERTIES ( "warehouse"="test" );
Routine load使用指定计算组
job_properties新增 "
warehouse
" 参数,默认值为当前Session的Warehouse。CREATE ROUTINE LOAD <database_name>.<job_name> ON <table_name> [load_properties] [job_properties] FROM data_source [data_source_properties]
使用Routine Load指定名为
test
的Warehouse,通过持续消费Kafka中的消息并导入至StarRocks中,示例如下。CREATE ROUTINE LOAD my_db.routine_load_basic_types_xxx ON my_table COLUMNS (k1,k2,k3,k4,k5,k6,v1,v2,v3,v4,v5,v6,v7,v8), COLUMNS TERMINATED BY ',',where v1 != 0 PROPERTIES ( "desired_concurrent_number"="1", "max_error_number"="1000", "max_batch_interval"="7", "warehouse"="test" ) FROM KAFKA ( "kafka_broker_list"="<kafka_broker_ip>:<kafka_broker_port>", "kafka_topic"="xxx", "kafka_partitions"="0", "kafka_offsets"="OFFSET_BEGINNING" );
物化视图使用指定计算组
CREATE MATERIALIZED VIEW语句中PROPERTIES
新增 "warehouse
"参数,默认值为当前Session的Warehouse。语法如下:
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [database_name.]<mv_name>
[COMMENT ""]
[PROPERTIES ("key"="value", ...)]
AS
<query_statement>
例如:要创建一个名为order_mv的物化视图,指定后续改写操作都在名为test
的Warehouse中运行,创建语句如下:
CREATE MATERIALIZED VIEW order_mv
DISTRIBUTED BY HASH(`order_id`)
REFRESH ASYNC EVERY (interval 1 MINUTE)
PROPERTIES ("warehouse" = "test")
AS SELECT
order_list.order_id,
sum(goods.price) as total
FROM order_list INNER JOIN goods ON goods.item_id1 = order_list.item_id2
GROUP BY order_id;
执行成功后,可以用以下两种方式查看Warehouse信息。fe.audit.log中也会记录物化视图改写语句的执行情况,其中包含了Warehouse字段。
方式一:执行以下命令,查询名为 "order_mv" 的物化视图的详细信息。
SHOW materilized views WHERE name="order_mv";
方式二:执行以下命令,查看创建物化视图 "order_mv" 的完整SQL语句。
SHOW CREATE materilized VIEW order_mv;
Compaction使用指定计算组
Compaction默认是在default_warehouse
中执行的。如果想要指定其他Warehouse,可通过修改配置项lake_compaction_warehouse
实现。支持在Session中动态修改和在fe.conf中修改后重启两种方式。
例如,想要指定名为test的Warehouse做Compaction。
方式一:您可以通过ADMIN SET FRONTEND CONFIG命令在线修改FE动态参数。
ADMIN SET FRONTEND CONFIG ("lake_compaction_warehouse" = "test");
方式二:在fe.conf中写入
lake_compaction_warehouse = test;
后重启FE以使修改生效。
修改后可通过show proc '/compactions' ;
查看最近的Compaction记录,最后一列是Warehouse信息。
JDBC连接使用指定计算组
语法如下:
jdbc.url=jdbc:mysql://<mysql_host>:3306/dbName?sessionVariables=warehouse=<warehouse_name>
Superset连接使用指定计算组
参考支持 Superset | StarRocks安装starrocks-sqlalchemy,使用init_command设置对应的Warehouse。
starrocks://<username>:<password>@<host>:<port>/<database_name>?init_command=set warehouse = <warehouse_name>
权限相关
您可以通过GRANT操作对用户和角色进行授权。语法如下:
GRANT
{ USAGE }
ON { WAREHOUSE <warehouse_name> [, <warehouse_name>,...] | ALL WAREHOUSE }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
权限 | 用途 |
USAGE | 使用指定的Warehouse。 |
拥有Warehouse的Usage权限,默认也具备Show权限。
示例:已有用户名为user1
,为其赋予USAGE权限。
GRANT USAGE ON warehouse waa TO user1;
更多权限相关操作,请参见管理用户权限。