本文為您介紹在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;
更多權限相關操作,請參見管理用戶權限。