全部產品
Search
文件中心

AnalyticDB:非同步提交匯入任務

更新時間:Mar 03, 2026

AnalyticDB for MySQL支援通過非同步方式提交資料匯入任務。

應用情境

在使用INSERT INTOINSERT OVERWRITE SELECT匯入資料時,預設是同步執行流程,當資料量較大達到幾百GB,用戶端到AnalyticDB for MySQL服務端的串連會中斷,導致資料匯入失敗。因此,在資料量較大的情境,推薦通過非同步方式提交資料匯入任務。

非同步提交任務

文法

  • 基礎文法

    SUBMIT JOB INSERT OVERWRITE table_name select_statement;
  • 增強文法。

    在提交任務時指定別名。

    SUBMIT JOB <job_alias_name> AS <query_body>;
    • 唯一性:別名必須唯一,由使用者自行保證。

    • 格式:類型為字串,兩側不添加單引號或雙引號。

    • 字元集:僅支援字母、數字和底線

    • 長度:最長 128 位。

樣本

  • 提交非同步任務

    SUBMIT JOB INSERT OVERWRITE test SELECT * FROM test_external_table;

    執行上述語句後,返回job_id。使用job_id可以查詢非同步任務的狀態。

    +---------------------------------------+
    | job_id                                |
    +---------------------------------------+
    | 2017112122202917203100908203303000715 |
  • 提交非同步任務並指定任務別名

    • 正確樣本

      SUBMIT JOB test_123 AS INSERT INTO test SELECT * FROM test_external_table;
    • 錯誤樣本

      任務別名兩側不能添加單引號或雙引號。

      SUBMIT JOB 'test_123' AS INSERT INTO test SELECT * FROM test_external_table;
      SUBMIT JOB "test_123" AS INSERT INTO test SELECT * FROM test_external_table;

設定優先權調度

3.1.3.6及以上版本支援優先順序調度。在SQL語句前添加Hint/*+async_job_priority=n*/ 可以指定非同步任務的優先順序。預設優先順序值為1,值越大表示優先順序越高,會被系統優先調度。

/*+async_job_priority=10*/ SUBMIT JOB INSERT OVERWRITE test SELECT * FROM test_external_table;

查詢非同步任務狀態

文法

  • 使用job_id查詢

    SHOW JOB STATUS WHERE job_id='job_id';
  • 使用任務別名查詢

    SHOW JOB STATUS WHERE job_name='job_alias_name';

樣本

SHOW JOB STATUS WHERE job_id='2017112122202917203100908203303000715';

返回結果如下:

+-------------------------------------------+-------------+-----------+--------------+-----------+----------+-------------------------+-------------------------+---------------------------------------------------+-------------------------------------------+------------+----------+------------+-------------+------------+------------------+------------------------+
| job_id                                    | schema_name | status    | process_rows | fail_rows | fail_msg | create_time             | update_time             | definition                                        | exec_job_id                               | total_rows | progress | start_time | result_rows | result_url | query_priority   | user_define_job_name   |
+-------------------------------------------+-------------+-----------+--------------+-----------+----------+-------------------------+-------------------------+---------------------------------------------------+-------------------------------------------+------------+----------+------------+-------------+------------+------------------+------------------------+
| 2026022710213902101709304503151000743     | test_db     | SUCCEEDED |            4 |         0 | NULL     | 2026-02-27 10:21:39.0   | 2026-02-27 10:21:45.0   | INSERT INTO test SELECT * FROM test_external_table| 2026022710214402101706516803151005717     |          0 | NULL     | NULL       |           0 | NULL       | NORMAL           | test_123               |
+-------------------------------------------+-------------+-----------+--------------+-----------+----------+-------------------------+-------------------------+---------------------------------------------------+-------------------------------------------+------------+----------+------------+-------------+------------+------------------+------------------------+
說明

不同核心版本的叢集返回的欄位不同,建議您根據返回結果中的status欄位解析非同步任務狀態。

任務狀態及映射關係

數倉版任務狀態

湖倉版任務狀態

說明

INIT

SUBMITTING

非同步任務已提交。

SUBMITTED

RUNNING

非同步任務執行中。

RUNNING

FINISH

SUCCEEDED

非同步任務執行成功。

FAILED

FAILED

非同步任務執行失敗。

CANCELLED

非同步任務取消執行。

說明
  • CANCELLED為新增的非同步任務狀態,數倉版中無映射關係。

終止任務

說明

  • 未調度起來的任務和已完成(失敗或成功)的任務會被移除隊列。

  • 正在啟動並執行任務被終止,已匯入的資料可能會被復原,建議手動刪除殘留資料。

  • 不支援直接通過任務別名user_define_job_name終止任務,您可以通過任務別名查詢job_id,使用job_id終止任務。

文法

CANCEL JOB 'job_id';

樣本

CANCEL JOB '2017112122202917203100908203303000715';