异步提交导出任务
AnalyticDB for MySQL支持通过异步方式提交数据导出任务。
应用场景
在使用INSERT INTO或INSERT OVERWRITE INTO 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';