全部產品
Search
文件中心

E-MapReduce:阿里雲StarRocks業務使用最佳實務

更新時間:May 30, 2026

本文旨在為您介紹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_idsite_id,而 city_id 的取值只有幾十,僅使用 city_id 作為分桶列可能導致某些桶的資料量過大,從而產生資料扭曲。此時可考慮將 city_idsite_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 類型的列。

    • 在首碼欄位中,CHARVARCHAR 和 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和等值(=)過濾條件的查詢。

  • 不支援為 TINYINTFLOATDOUBLE 和 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 SETS

    SELECT 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,避免使用FLOATDOUBLE類型的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服務時,請確保已正確設定相關許可權,避免因許可權不足而導致的操作失敗。

資料匯入

基本用法

資料匯入注意事項

  • 禁止使用插入語句:在生產環境中,請勿使用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的整合。

更多資訊,請參見Manage permissions with Apache Ranger

資料審計日誌

-- 查詢審計日誌記錄
SELECT * FROM _starrocks_audit_db_.starrocks_audit_tbl t ;

更多資訊,請參見審計日誌

StarRocks遷移方案

您可以將您建立的StarRocks遷移至EMR Serverless StarRocks。

更多資訊,請參見從自建StarRocks叢集向Serverless StarRocks的遷移方案

聯絡我們

如果您有業務問題或者產品疑難問題,可加入DingTalk群24010016636諮詢。