全部產品
Search
文件中心

AnalyticDB:BUILD

更新時間:Jul 27, 2024

BUILD任務用於將即時寫入的資料轉換為歷史資料格式。在該過程中會構建索引、清理冗餘資料、執行非同步DDL任務等,將資料從寫最佳化轉變為讀取最佳化。

注意事項

BUILD期間,不能執行INSERT OVERWRITE SELECT匯入任務,需等待BUILD任務結束才能執行。

功能說明

BUILD命令可以對即時寫入的資料及其涉及到的歷史分區,進行合并、構建索引、執行非同步DDL等操作。如果使用者通過INSERT/UPDATE/DELETE等修改分區的資料,那麼該分區需要執行BUILD,與即時資料結合後,產生新的分區。如果使用者沒有修改分區的資料,則該分區不會被BUILD任務修改。

BUILD任務開始後,不能停止任務。

當前BUILD任務是以表為粒度進行調度的。BUILD任務開始執行後,表級的BUILD任務會切分為以Shard為粒度的BUILD子任務,每個Shard的3個副本都有一個BUILD子任務,當所有的子任務都執行完成後,BUILD任務完成。不同表的BUILD任務可以並存執行,並行度預設為3。

自動觸發BUILD任務

自動觸發BUILD任務需要滿足以下其中一個條件:

  • 達到最小BUILD時間間隔(數倉版預留模式:0.5小時,數倉版彈性模式:1.5小時,湖倉版:1.5小時),且單表的某個一級分區滿足新增資料達到5萬條。

  • 距離上次BUILD,時間已過去24小時且至少修改1行資料。

手動觸發BUILD任務

可通過以下方式手動觸發BUILD任務:

  • BUILD

    BUILD TABLE <table_name>;

    只會對變動的分區進行BUILD。

  • 強制全表BUILD

    BUILD TABLE <table_name> force = true;

    對錶的所有分區進行強制BUILD。

  • 指定分區BUILD

    BUILD TABLE test force=true partitions='partition1,partition2';
    重要

    僅3.1.6.0及以上版本的叢集支援指定分區BUILD。如何查看叢集核心版本,請參見如何查看執行個體版本資訊。如需升級核心版本,請聯絡支援人員。

    當表較大時,BUILD TABLE <table_name> force = true;的執行時間會很長。AnalyticDB for MySQL支援通過partition指定需要BUILD的分區,減少長時間的BUILD資源佔用,儘快完成BUILD任務。

配置BUILD自動調度時間

  • 配置方法

    SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;

    startend取0~24之間的整數,表示在start~end整點時間段內可以調度BUILD任務。可以配置多個時間段,以英文分號(;)隔開。

    重要

    該配置只限制任務調度時間段,不限任務執行時間段。即某任務在該時間內調度,會出現因執行時間較長,超出該時間段的情況。

  • 樣本

    配置0~6點和18~24點調度BUILD任務。

    SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,24`;

配置BUILD調度優先順序

BUILD調度是按照單表某個一級分區新增資料量排序下發任務,新增資料量大的分區先下發任務,根據下發時間的先後排序執行任務。當需要按業務緊急程度調度BUILD任務時,可以通過Hint或者SET ADB_CONFIG調整單表或多表BUILD調度的優先順序。

重要
  • 僅3.1.5.0及以上版本的叢集支援配置BUILD調度的優先順序。如何查看叢集核心版本,請參見如何查看執行個體版本資訊。如需升級核心版本,請聯絡支援人員。

  • Hint僅支援對單張表配置優先順序,且調度優先順序僅針對當前提交的任務生效。

  • SET ADB_CONFIG既支援對單張表配置優先順序,也支援對多張表配置優先順序,且優先順序一直生效,直至再次配置該表優先順序時,才會改變。

  • 如果同時使用Hint和SET ADB_CONFIG為同一個表配置了不同的優先順序,在當前提交的任務中,該表的BUILD調度優先順序採納Hint方式配置的優先順序。

BUILD調度的優先順序由參數task_priority控制,取值為整數,預設值為30。數值越大,下發調度的優先順序越高。配置優先順序後,前端節點在調度BUILD任務時會自動加上優先順序。若task_priority取值小於0,則表示關閉該表自動調度BUILD任務,前端節點不再對該表發起BUILD任務。

配置方法如下:

  • 通過Hint配置BUILD調度的優先順序

    /*+ build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;

    例如,設定資料庫adb_demo中表test的BUILD調度優先順序為30。

    /*+ build_task_priority = 30 */ Build TABLE adb_demo.test;
  • 通過Config配置BUILD調度的優先順序

    • 配置不同資料庫中多張表的BUILD調度優先順序:

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;
      說明

      不同的表使用英文分號(;)隔開。

      例如,設定資料庫adb_demo1中表test1的BUILD調度優先順序為30,資料庫adb_demo2中表test2的BUILD調度優先順序為10。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`;
    • 配置同一資料庫的所有表具有相同的BUILD調度優先順序:

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;

      例如,設定資料庫adb_demo1中所有表的BUILD調度優先順序均為30。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`;
    • 配置同一資料庫中某張表與其他表具有不同的BUILD調度優先順序:

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;

      例如,設定資料庫adb_demo1test1表的BUILD調度優先順序為30,其他所有表的調度優先順序為10。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;

您可以通過SHOW ADB_CONFIG查看錶當前BUILD調度的優先順序。

查看BUILD任務的狀態

自動或手動觸發BUILD任務後,執行如下SQL,查看最近3天BUILD任務的狀態。

SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;

根據status的值,判斷BUILD任務狀態。狀態說明如下。

status

說明

INIT

任務初始化。

RUNNING

任務運行中。

FINISH

任務已完成。