AnalyticDB for MySQL支援通過非同步方式提交資料匯入任務。
應用情境
在使用INSERT INTO或INSERT 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';