AnalyticDB MySQL版支援通過非同步方式提交資料匯入任務。
應用情境
在使用INSERT INTO
或INSERT OVERWRITE SELECT
匯入資料時,預設是同步執行流程,當資料量較大達到幾百GB,用戶端到AnalyticDB MySQL服務端的串連會中斷,導致資料匯入失敗。因此,在資料量較大的情境,推薦通過非同步方式提交資料匯入任務。
非同步提交任務
文法
SUBMIT JOB INSERT OVERWRITE table_name
select_statement;
樣本
SUBMIT JOB INSERT OVERWRITE test SELECT * FROM test_external_table;
執行上述語句後,返回job_id。使用job_id可以查詢非同步任務的狀態。
+---------------------------------------+
| job_id |
+---------------------------------------+
| 2017112122202917203100908203303000715 |
設定優先權調度
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;
查詢非同步任務狀態
文法
SHOW JOB STATUS WHERE job='job_id';
樣本
SHOW JOB STATUS WHERE job='2017112122202917203100908203303000715';
返回結果如下:
+---------------------------------------+-------------+---------+----------+-----------------------+-----------------------+----------------------------------------------------------------+
| job_id | schema_name | status | fail_msg | create_time | update_time | definition |
+---------------------------------------+-------------+---------+----------+-----------------------+-----------------------+----------------------------------------------------------------+
| 2017112122202917203100908203303000715 | test | RUNNING | NULL | 2023-06-21 22:20:31.0 | 2023-06-21 22:20:40.0 | INSERT OVERWRITE test SELECT * FROM test_external_table |
說明
不同核心版本的叢集返回的欄位不同,建議您根據返回結果中的status欄位解析非同步任務。
任務狀態及映射關係
數倉版任務狀態 | 湖倉版任務狀態 | 說明 |
INIT | SUBMITTING | 非同步任務已提交。 |
SUBMITTED | RUNNING | 非同步任務執行中。 |
RUNNING | ||
FINISH | SUCCEEDED | 非同步任務執行成功。 |
FAILED | FAILED | 非同步任務執行失敗。 |
無 | CANCELLED | 非同步任務取消執行。 |
說明
CANCELLED為新增的非同步任務狀態,數倉版中無映射關係。
終止任務
說明
未調度起來的任務和已完成(失敗或成功)的任務會被移除隊列。
正在啟動並執行任務被終止,已匯入的資料可能會被復原,建議手動刪除殘留資料。
文法
CANCEL JOB 'job_id';
樣本
CANCEL JOB '2017112122202917203100908203303000715';