本文旨在為您介紹StarRocks的基礎使用方法和常見操作,適用於首次接觸StarRocks的使用者。
表模型設計(內表)
表模型選擇
-
如果有明確的主鍵且需要更新歷史資料,建議使用主鍵模型。
-
如果希望保留詳細資料且歷史資料不會進行更新,建議使用明細模型。
-
如果只需保留彙總資料,建議使用彙總模型。
建表限制與規範
通用限制
-
僅支援UTF-8編碼。
-
VARCHAR類型的最大長度為1048576。
-
資料目錄名、資料庫名、表名、視圖名、使用者名稱和角色名稱大小寫敏感,而列名和分區名大小寫不敏感。
主鍵表限制
-
在建表語句中,主鍵列必須在其他列之前定義。
-
主鍵必須包含分區列和分桶列。
-
主鍵列支援的資料類型為數值(整型、布爾)、日期和字串。
-
預設情況下,單條主索引值編碼後最大長度為128位元組。
-
建表後,主鍵不可修改。
-
主鍵列的值不可更新,避免破壞資料一致性。
建立表
建表文法
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...][, index_definition1[, index_definition2, ...]])[ENGINE = [olap|mysql|elasticsearch|hive|iceberg|hudi|jdbc]][key_desc][COMMENT "table comment"][partition_desc][distribution_desc][rollup_index][ORDER BY (column_definition1,...)][PROPERTIES ("key"="value", ...)][BROKER PROPERTIES ("key"="value", ...)]
常用語句
-
使用Hash分桶與列存彙總
CREATE TABLE example_db.table_hash (k1 TINYINT,k2 DECIMAL(10, 2) DEFAULT "10.5",v1 CHAR(10) REPLACE,v2 INT SUM )ENGINE = olap AGGREGATE KEY (k1, k2)COMMENT "my first StarRocks table"DISTRIBUTED BY HASH(k1); -
建立分區表
CREATE TABLE example_db.table_range (k1 DATE,k2 INT,k3 SMALLINT,v1 VARCHAR(2048),v2 DATETIME DEFAULT "2014-02-04 15:36:00")ENGINE = olap DUPLICATE KEY (k1, k2, k3)PARTITION BY RANGE (k1) (PARTITION p1 VALUES LESS THAN ("2014-01-01"),PARTITION p2 VALUES LESS THAN ("2014-06-01"),PARTITION p3 VALUES LESS THAN ("2014-12-01"))DISTRIBUTED BY HASH(k2); -
建立動態分區表
CREATE TABLE example_db.dynamic_partition ( k1 DATE, k2 INT, k3 SMALLINT, v1 VARCHAR(2048), v2 DATETIME DEFAULT "2014-02-04 15:36:00")ENGINE = olap DUPLICATE KEY (k1, k2, k3)PARTITION BY RANGE (k1) ( PARTITION p1 VALUES LESS THAN ("2014-01-01"), PARTITION p2 VALUES LESS THAN ("2014-06-01"), PARTITION p3 VALUES LESS THAN ("2014-12-01"))DISTRIBUTED BY HASH(k2)PROPERTIES ( "storage_medium" = "SSD", "dynamic_partition.time_unit" = "DAY", "dynamic_partition.start" = "-3", "dynamic_partition.end" = "3", "dynamic_partition.prefix" = "p"); -
通過選擇建立表
CREATE TABLE employee_new PRIMARY KEY(order_id)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; -
查看錶結構
SHOW CREATE TABLE [db_name.]table_name; -
建立和刪除索引
CREATE INDEX index3 ON sales_records (item_id) USING BITMAP COMMENT ''; DROP INDEX index3 ON sales_records; -
清空表或分區
TRUNCATE TABLE example_db.tbl; TRUNCATE TABLE tbl PARTITION (p1, p2);
欄位類型選擇
-
正確選擇時間類型和數字類型的列,以減少計算的開銷。例如,時間類型的資料“2024-01-01 00:00:00”不應使用VARCHAR儲存,這樣無法有效利用StarRocks內部的 ZoneMap 索引,從而影響過濾速度。
-
對於需要精確結果的情況,建議使用
DECIMAL類型,而非FLOAT或DOUBLE類型。
分區選擇
-
值變化不頻繁的時間列常用於
WHERE過濾,建議使用該列建立分區,可以結合日期(一級分區)和業務分類(二級分區,例如地區、訂單類型等枚舉類)。 -
對於有資料淘汰需求的情境,可以選擇使用動態分區。
-
如果資料更新呈現明顯的冷熱特徵,建議強制建立分區。例如,最近一周的資料可以按天分區。
-
單個分區的資料量建議不超過 100GB。
-
資料量超過 50GB 或 5,000,000 行(5KW)的表建議建立分區。
-
按需建立分區,避免過多分區,以免分區中繼資料佔用過多 FE 的記憶體。
-
當前支援的分區類型包括:時間類型(定界分割、運算式分區)、字串(列表分區)、數字(定界分割、列表分區)。
-
預設情況下,最大支援 1024 個分區,可以通過參數進行調整,但通常情況下無需調整。
分桶選擇
-
在生產環境中強制使用3個副本(僅適用於存算一體架構下)。
-
分桶個數的判斷:
-
當表或分區資料量超過50 GB時,每個桶預估為1 GB。
-
當表或分區資料量小於50 GB時,每個桶預估為500 MB。
-
根據以上策略估算出的分桶數如果小於 BE 節點數,則最終分桶數以 BE 節點數為準。例如,如果有 6 個 BE 節點且根據 500MB 每個桶預估得出的分桶數為 1,最終分桶數取 6。
-
單個桶的預估大小應在 500MB 至 1GB 之間,而未經處理資料的大小通常在 5GB 至 10GB(匯入 StarRocks 後,壓縮比約為 7:1 至 10:1)。
-
對於非分區表,避免使用動態分桶,應根據實際資料量評估分桶個數。
-
如果分區表各分區的資料差異很大,建議不要使用動態分桶策略。
-
-
分桶裁剪與資料扭曲的選擇
-
如果分桶列在
WHERE子句中頻繁使用且重複度較低(例如使用者識別碼、事務 ID 等),則可將該列用作分桶列。 -
如果查詢條件中包含
city_id和site_id,而city_id的取值只有幾十,僅使用city_id作為分桶列可能導致某些桶的資料量過大,從而產生資料扭曲。此時可考慮將city_id和site_id聯合作為分桶欄位,但這樣做的缺點是,如果查詢條件中僅包含city_id,則無法利用分桶裁剪。 -
如果沒有合適的欄位打散資料,可以考慮使用隨機分桶,但此方式無法利用分桶裁剪的優勢。
-
對於有兩個或多個超過 100,000 行的表進行
JOIN操作,建議使用 Colocate Join,詳情請參見Colocate Join。
-
索引選擇
排序列和首碼索引選擇
自3.0版本起,主鍵表支援使用ORDER BY定義排序鍵,自3.3版本起,明細表、彙總表和更新表也支援此功能。排序鍵在寫入時自動產生首碼索引。首碼索引是一種稀疏索引,其大小通常會比資料量小至少1024倍,因此一般可以全量緩衝於記憶體中,從而加速查詢效能。
-
排序列的選擇:3.0版本以前,主鍵模型中排序列由PRIMARY KEY指定,3.0版本起通過ORDER BY指定。
-
資料處理順序:
-
在彙總表中,資料首先按照彙總鍵(
AGGREGATE KEY)進行彙總,然後再按照排序鍵(ORDER BY)排序。ORDER BY和AGGREGATE KEY中的列需一致,但順序可以不同。 -
在更新表中,資料首先根據唯一鍵(
UNIQUE KEY)進行替換(REPLACE),然後按照排序鍵(ORDER BY)排序。ORDER BY和UNIQUE KEY中的列需一致,但順序可以不同。 -
在主鍵表中,資料首先根據主鍵(
PRIMARY KEY)進行替換(REPLACE),然後按照排序鍵(ORDER BY)排序。
-
-
首碼索引的設計考慮:
-
首碼索引是在排序列的基礎上引入的稀疏索引,進一步提升查詢效率,並能夠全部載入到記憶體中。
-
經常作為查詢條件的列建議選為排序列。
-
排序列建議選擇為3至4列,盡量不超過 4 列,以避免增大排序開銷和降低匯入效率。
-
首碼索引不應超過36位元組,且不能包含超過 3 列。遇到
VARCHAR類型時會截斷,且首碼索引中不能包含FLOAT或DOUBLE類型的列。 -
在首碼欄位中,
CHAR、VARCHAR和STRING類型的列只能出現一次,且應處於末尾位置。
-
在確定鍵列及其順序時,應結合實際業務查詢情境,充分考慮首碼索引帶來的優勢。儘可能將經常需要查詢的鍵列放置在前面,欄位資料類型盡量選擇 DATE、整型(如 INT)等高效的類型。
Bitmap索引
-
適合基數在 10,000 至 100,000 之間的列。
-
Bitmap索引最佳化等值查詢(=)、範圍查詢(例如>、>=、<、<=)和IS NULL查詢,但不適用於不等於查詢(!=)和LIKE查詢。
-
不支援FLOAT、DOUBLE、BOOLEAN和DECIMAL類型的列建立Bitmap索引。
-
對於基數低於 255 的列(如城市、性別),不需要建立 Bitmap 索引,因為 StarRocks 會自動針對這些情況建立低基數字典以加速查詢。
-
在明細模型和主鍵模型中,可以為所有列建立 Bitmap 索引。在彙總模型和更新模型中,僅支援為Key建立 Bitmap 索引。
Bloom Filter索引
-
Bloom Filter 索引可以快速判斷表的資料檔案中是否可能包含要查詢的資料。如果確定不包含,查詢可以直接跳過該檔案,從而減少掃描的資料量。
-
適合基數在 100,000 以上且列的重複度很低的列。
-
適用於IN和等值(=)過濾條件的查詢。
-
不支援為
TINYINT、FLOAT、DOUBLE和DECIMAL類型的列建立 Bloom Filter 索引。 -
在主鍵模型和明細模型中,所有列均可建立Bloom Filter索引;彙總模型和更新模型中,僅維度列(Key列)支援建立。
資料生命週期
-
建議使用
TRUNCATE刪除資料,而非DELETE。 -
完整的UPDATE文法僅適用於3.0版本及以上的主鍵模型;高並發的
UPDATE操作受到限制,建議每次更新操作之間間隔至少一分鐘。 -
如果必須使用
DELETE刪除資料,務必帶上WHERE條件,並且禁止並發執行DELETE。例如,刪除id=1, 2, 3, ..., 1000時,建議DELETE FROM tbl1 WHERE id IN (1, 2, 3, ..., 1000)的方式,而非分開執行 1000 條DELETE語句。 -
DROP操作:-
DROP操作預設將資料移入 FE 資源回收筒,預設保留 86,400 秒(1 天),此期間可恢複以避免誤操作。該時間受參數catalog_trash_expire_second控制。 -
超過 1 天后,資料將進入 BE 的
trash目錄,預設保留 259,200 秒(3 天)。在 2.5.17、3.0.9 和 3.1.6 之後,預設值已改為 86,400 秒(1 天),受參數trash_file_expire_time_sec控制。 -
如果在
DROP後希望儘快釋放磁碟空間,可以考慮調小 FE 和 BE 的trash保留時間。
-
SQL查詢
SQL基本使用
基本文法
詳情請參見SELECT。
常用SQL
-
簡單彙總分析
SELECT tiny_column, SUM(short_column)FROM small_table GROUP BY tiny_column HAVING SUM(short_column) = 1; -
使用
GROUPING SETSSELECT a, b, SUM(c)FROM tab1 GROUP BY GROUPING SETS ((a, b), (a), (b), ()); -
使用
LIMIT進行分頁SELECT varchar_column FROM big_table ORDER BY varchar_column LIMIT 1 OFFSET 0;
SQL查詢注意事項
-
避免使用
SELECT *,建議指定需要查詢的列,例如SELECT col0, col1 FROM tb1;。 -
避免全表掃描,建議增加過濾條件,例如
SELECT col0, col1 FROM tb1 WHERE id = 123;。 -
避免巨量資料量下載,如果要使用,強制使用分頁,例如
SELECT col0, col1, col2, ..., col50 FROM tb ORDER BY id LIMIT 0, 50000;。 -
分頁操作需加上
ORDER BY以確保結果有序。 -
雖然StarRocks已進行隱式轉換以達到最佳效能,但建議使用類型一致的欄位進行
JOIN,避免使用FLOAT或DOUBLE類型的JOIN以導致結果不準確。 -
關聯欄位不得使用函數或運算式。
SELECT * FROM table1 JOIN table2 ON DATE_FORMAT(tb1.col1, '%Y-%m-%d') = DATE_FORMAT(tb2.col1, '%Y-%m-%d'); -
在處理兩個或多個超過KW行的表
JOIN時,推薦使用Colocate Join。 -
避免笛卡爾積。
-
避免使用一些不必要的函數或者運算式。
-
移除不必要的函數
-- Q1 bad case SELECT l_tax FROM lineitem WHERE CAST(l_shipdate AS VARCHAR) > SUBSTR('1990-01-02 12:30:31', 1, 10); -- Q2 good case SELECT l_tax FROM lineitem WHERE l_shipdate > '1990-01-02'; -
避免過度使用函數處理運算式
-- Q1 bad case SELECT COUNT(1) FROM lineitem WHERE l_shipdate >= REGEXP_EXTRACT("TIME:1996-01-02 20:00:00", "(\\d{4}-\\d{2}-\\d{2})", 1); -- Q2 good case SELECT COUNT(1) FROM lineitem WHERE l_shipdate >= "1996-01-02"; -
查詢多個表需要指定串連條件
-- bad case SELECT * FROM table1, table2; -- good case SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column1; -
正確使用子查詢
-- bad case SELECT *FROM table1 WHERE column1 IN (SELECT column2 FROM table2); -- good case SELECT * FROM table1 WHERE column1 IN (SELECT column2 FROM table2 WHERE table1.column3 = table2.column3); -
使用AND條件代替OR條件
-- bad case SELECT * FROM table1 JOIN table2 WHERE (table1.column1 = table2.column1 OR table1.column2 = table2.column2); -- good case SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column1 AND table1.column2 = table2.column2;
-
慢SQL分析
Profile分析,請參見Query Profile介紹。
診斷建議,請參見Query Profile診斷建議。
高並發情境
-
盡量利用分區和分桶裁剪,具體參考上文的分區和分桶選擇部分。
-
調高使用者的並發限制,可以設定為1000(預設值為100)。
SET PROPERTY FOR 'jack' 'max_user_connections' = '1000'; -
開啟Page Cache和Query Cache以最佳化效能。
物化視圖
在阿里雲EMR Serverless StarRocks中查看和管理物化視圖更為便捷,相關資訊可參閱 查看物化視圖。
基本用法
-
非同步物化視圖
適用以下情境:
-
分鐘級以上的預彙總加工情境。
-
多表關聯,重複查詢較多的情況。
-
資料倉儲中建模分層,替代傳統ETL情境。
-
資料湖加速,將資料湖中的資料自動加工到StarRocks內表,提升查詢效能。
-
-
同步物化視圖:適用於基於單表的即時預彙總情境,例如精準去重、近似去重,以及增加首碼索引加速等。
-
查詢改寫:StarRocks能夠在不修改查詢語句的前提下,自動將基表上的查詢改寫為基於物化視圖的查詢。詳見物化視圖查詢改寫文檔。
-
透明加速:提供查詢效能的自然提升。
常用命令
-
建立物化視圖
CREATE MATERIALIZED VIEW order_mv DISTRIBUTED BY HASH(`order_id`)REFRESH ASYNC START('2022-09-01 10:00:00') EVERY (INTERVAL 1 DAY)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; -
查看非同步物化視圖建立語句
SHOW CREATE MATERIALIZED VIEW order_mv; -
查看當前資料倉儲內所有非同步物化視圖
SHOW MATERIALIZED VIEWS; -
查看特定非同步物化視圖
SHOW MATERIALIZED VIEWS WHERE NAME = "order_mv"; -
通過名稱匹配查看非同步物化視圖
SHOW MATERIALIZED VIEWS WHERE NAME LIKE "order%"; -
非同步呼叫重新整理任務
REFRESH MATERIALIZED VIEW order_mv; -
同步調用重新整理任務
REFRESH MATERIALIZED VIEW order_mv WITH SYNC MODE; -
查看任務表中的最新任務
SELECT * FROM information_schema.tasks ORDER BY CREATE_TIME DESC LIMIT 1; -
查看基於查詢到的TASK_NAME的執行狀態
SELECT * FROM information_schema.task_runs WHERE task_name = 'mv-59299' ORDER BY CREATE_TIME; -
刪除物化視圖
DROP MATERIALIZED VIEW order_mv; -
常用參數
enable_materialized_view_rewrite:是否啟用物化視圖的自動改寫,取值為true(自2.5版本起為預設值)和false。
物化視圖注意事項
-
重新整理時間建議:非同步物化視圖的重新整理時間建議設定為10分鐘以上,具體取決於業務量和叢集規模,強烈不建議小於5分鐘。非同步物化視圖基於分區層級進行重新整理。
-
重新整理資源管理:對於擁有較多分區的非同步物化視圖,單次重新整理可能消耗較多資源。可以通過設定重新整理機制來限制每次重新整理的最大分區數量,從而將重新整理任務拆分,以確保資料量大的物化視圖能夠分批、穩定地完成重新整理。
-
儲存空間管理:為非同步物化視圖的分區指定存活時間(TTL),以減少所佔用的儲存空間。
-
Multi-Warehouse支援:在存算分離架構下,如果您有Multi-Warehouse,可以為物化視圖指定獨立的Warehouse進行處理,以避免幹擾正常業務查詢。
-
嵌套層數:物化視圖支援嵌套層數,但在生產環境中建議嵌套層數不超過三層。
-
查詢語句限制:建立物化視圖的查詢語句中不支援非確定性函數,例如
rand()、random()、uuid()和sleep()。 -
延遲重新整理時間:預設情況下,執行
CREATE MATERIALIZED VIEW語句後,StarRocks 會立即開始重新整理任務,這將佔用一定的系統資源。如需延遲重新整理時間,請添加REFRESH DEFERRED參數。
資料湖分析(外表)
基本用法
請參見資料目錄。
常用Catalog
-
阿里雲DLF 1.0(舊版)
-
僅適用於阿里雲EMR Serverless StarRocks叢集。
-
dlf.catalog.id可為空白,如果為空白則使用預設的DLF Catalog。
CREATE EXTERNAL CATALOG <catalog_name> PROPERTIES ( "type" = "dlf", "dlf.catalog.id" = "xxxxxx" ); -
-
阿里雲DLF
僅適用於阿里雲EMR Serverless StarRocks叢集。
CREATE EXTERNAL CATALOG <catalog_name> PROPERTIES ( "type" = "paimon", "paimon.catalog.type" = "dlf-paimon", "dlf.catalog.id" = "clg-paimon-xxxx" ); -
建立Hive Catalog
CREATE EXTERNAL CATALOG <catalog_name> PROPERTIES ( "type" = "hive", "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083" ); -
查看Catalog列表及建立語句
SHOW CATALOGS; SHOW CREATE CATALOG <catalog_name>; -
刪除Catalog
DROP CATALOG <catalog_name>; -
手動重新整理緩衝中繼資料
自StarRocks 2.5.5版本起,支援周期性重新整理Hive中繼資料快取。預設每10分鐘自動重新整理,只有在新增分區後需要立即查詢這些資料時,才需手動更新。
REFRESH EXTERNAL TABLE <table_name> [PARTITION ('partition_name', ...)]; -
啟用Trino文法進行資料湖分析
SET sql_dialect = 'trino';
外表注意事項
-
使用建議:建議通過External Catalog方式建立外表,而非External Table方式。
-
JDBC Catalog使用:在頻繁查詢或資料量較大的情況下,建議定時通過物化視圖將資料載入到內表,以提高效能並減少對源庫的查詢壓力。
-
Object Storage Service查詢:在查詢OSS、S3等Object Storage Service資料時,請注意API訪問費用。建議開啟Data Cache或使用物化視圖加工到內表,以減少API訪問頻率並提高查詢效能,避免全表掃描等高成本操作。
-
許可權配置:特別是使用阿里雲DLF服務時,請確保已正確設定相關許可權,避免因許可權不足而導致的操作失敗。
資料匯入
基本用法
-
Flink寫入StarRocks
-
適用於將多種資料來源(如MySQL、Kafka、PostgreSQL、SQL Server等)即時匯入StarRocks,詳情請參見連接器。
-
基於Realtime Compute,使用CTAS語句將MySQL資料同步至StarRocks,詳情請參見基於Realtime ComputeFlink使用CTAS語句同步MySQL資料至StarRocks。
-
使用Flink CDC(Change Data Capture)同步MySQL資料至StarRocks,詳情請參見使用Flink CDC同步MySQL資料至StarRocks。
-
-
Kafka匯入StarRocks
使用Routine Load匯入Kafka中的資料,詳情請參見Load data using Routine Load。
-
Spark匯入StarRocks
適用於將資料湖或HDFS中的資料匯入至StarRocks,詳情請參見Load data using Routine Load。
-
OSS資料匯入StarRocks
通過Broker Load從OSS匯入資料,詳情請參見Loading data from Object Storage。
資料匯入注意事項
-
禁止使用插入語句:在生產環境中,請勿使用
INSERT INTO VALUES()匯入資料。 -
設定匯入批次間隔:建議匯入批次間隔為 10 秒或更長時間,尤其是在即時情境下。例如,Flink寫入時建議設定時間間隔在10秒以上,以提高效能。
-
主鍵模型更新情境:建議開啟索引落盤,確保使用SSD、NVMe或更高效能的磁碟,以提升寫入效率。
-
ETL情境務必注意:在多個ETL(
INSERT INTO SELECT)情境中,建議開啟spill落盤功能,以避免記憶體超過限制。 -
匯入頻率與資料合併:如果匯入頻率過快,資料可能無法及時合并(Compaction),這會導致未合并版本數超過最大限制(預設最大未合并版本數為1000)。因此,建議:
-
增大單次匯入的資料量。
-
降低匯入頻率。
-
修改 BE 設定檔
be.conf中的相關參數配置,以加快資料合併(Compaction)的速度。
-
資料預熱
資料預熱適用於存算分離架構,單計算群組和多計算群組(Multi-Warehouse)情境均可使用。
CN加速
-
計算群組一(CN):主要用於在資料倉儲的ETL加工。在表資料寫入情境中,會自動觸發表的預熱。在同一個CN查詢時,無需手動進行資料預熱。
-
計算群組二和三(CN):主要用於資料查詢加速。在讀取資料之前,需要主動對錶進行預熱。預熱方式如下:
-
方式一: 將資料預熱到指定的Warehouse
SET WAREHOUSE = 'XXX_warehouse'; CACHE SELECT * FROM xxx_table WHERE xxx; -
方式二:在指定Warehouse下提交周期性預熱任務
SUBMIT TASK ALWAYS_CACHE SCHEDULE EVERY (INTERVAL 5 MINUTE) AS CACHE SELECT * FROM xxx_table WHERE xxx;由於週期性任務無法設定依賴,預熱時機可能不夠準確。建議在周期性ETL任務結束時,使用方式一進行主動預熱。更多資訊,請參見資料預熱。
-
指定計算群組進行資料查詢
-
方式一:在JDBC串連串中通過sessionVariables指定
jdbc.url=jdbc:mysql://<mysql_host>:3306/dbName?sessionVariables=warehouse=<warehouse_name> -
方式二:通過JDBC連接字串中的sessionVariables指定
SET warehouse=<warehouse_name>; SELECT * FROM my_db.my_table; -
方式三:通過SQL Hint中的SET_VAR指定
SELECT /*+SET_VAR(warehouse="warehouse_name")*/ * FROM my_db.my_table;
查看預熱效果
-
瞭解預熱效果需要監控系統的三層資料存放區模式:
-
Page Cache:自動工作。在查詢首次請求訪問資料區塊時,系統會將其載入到緩衝中,後續查詢自動加速。
-
Data Cache預熱:匯入資料自動預熱,或通過手動/定時任務執行預熱操作。
-
-
查看預熱效果:可以在SQL執行詳情頁的Profile執行樹中找到
CONNECTOR_SCAN節點,主要關注以下指標:-
CompressedBytesReadLocalDisk:從本機快取讀取的位元組數。
-
CompressedBytesReadRemote:從遠端OSSObject Storage Service讀取的位元組數。
需要注意的是,PageCountMemory指標(從Page Cache讀取)。若所有資料都是從Page Cache擷取,則無法判斷Data Cache預熱是否生效。
-
-
驗證CN加速效果:為了更好地驗證CN加速效果(資料預熱),您可以暫時關閉Page Cache機制。
SET disable_storage_page_cache=false; #關閉Page Cache -
評估加速效果:關閉Page Cache後,通過觀察以下指標評估預熱效果。
-
CompressedBytesReadLocalDisk > 0且CompressedBytesReadRemote = 0:表示全部資料命中預熱。 -
CompressedBytesReadLocalDisk = 0且CompressedBytesReadRemote > 0:表示全部不命中預熱。 -
CompressedBytesReadLocalDisk > 0且CompressedBytesReadRemote > 0:表示部分命中預熱。
-
修改表分桶數
-
方式一:使用ALTER命令修改分桶數(不推薦大批量調整)
ALTER TABLE XXX_table DISTRIBUTED BY HASH(`ds`, `user_id`) BUCKETS 48;執行此命令後,將啟動資料重分布任務,該過程可能需要較長時間。
查看重分布任務進度。
SHOW ALTER TABLE OPTIMIZE;如果發現表資料重分布任務卡死,可以執行以下命令取消表最佳化任務。
CANCEL ALTER TABLE OPTIMIZE FROM XXX_table; -
方式二:通過建立新表、INSERT INTO 和 RENAMING(推薦)
這種方式效能會比較好,但比較麻煩,需要人工處理,超大表需要分批次執行。
許可權管理
StarRocks內部許可權
可以對不同使用者和角色的許可權進行合理配置,實現許可權的最小粒度分配。
更多資訊,請參見Overview of privileges。
Ranger許可權整合
在資料湖分析情境下,Ranger許可權的整合需要與Ranger實現許可權的統一,因此可以考慮進行Ranger的整合。
資料審計日誌
-- 查詢審計日誌記錄
SELECT * FROM _starrocks_audit_db_.starrocks_audit_tbl t ;
更多資訊,請參見審計日誌。
StarRocks遷移方案
您可以將您建立的StarRocks遷移至EMR Serverless StarRocks。
聯絡我們
如果您有業務問題或者產品疑難問題,可加入DingTalk群24010016636諮詢。