AnalyticDB for MySQL支持通过异步方式提交数据导出任务。
应用场景
在使用INSERT INTO
或INSERT OVERWRITE INTO SELECT
导出数据时,默认是同步执行流程,当数据量较大达到几百GB,客户端到AnalyticDB for MySQL服务端的连接会中断,导致数据导出失败。因此,在数据量较大的场景,推荐通过异步方式提交数据导出任务。
异步提交任务
语法
SUBMIT JOB INSERT OVERWRITE table_name
select_statement;
示例
SUBMIT JOB INSERT OVERWRITE INTO courses_external_table SELECT * FROM courses;
执行上述语句后,返回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 INTO courses_external_table SELECT * FROM courses;
查询异步任务状态
语法
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 | 2017-11-21 22:20:31.0 | 2017-11-21 22:20:40.0 | INSERT overwrite INTO courses_external_table SELECT * FROM courses |
说明
不同内核版本的集群返回的字段不同,建议您根据返回结果中的status字段解析异步任务。
任务状态及映射关系
数仓版任务状态 | 湖仓版任务状态 | 说明 |
INIT | SUBMITTING | 异步任务已提交。 |
SUBMITTED | RUNNING | 异步任务执行中。 |
RUNNING | ||
FINISH | SUCCEEDED | 异步任务执行成功。 |
FAILED | FAILED | 异步任务执行失败。 |
无 | CANCELLED | 异步任务取消执行。 |
说明
CANCELLED为新增的异步任务状态,数仓版中无映射关系。
终止任务
说明
未调度的任务和已完成(失败或成功)的任务会被移除队列。
正在运行的任务会被终止,已导出的数据可能会被回滚,建议手动删除残留数据。
语法
CANCEL JOB 'job_id';
示例
CANCEL JOB '2017112122202917203100908203303000715';