异步提交导出任务

AnalyticDB for MySQL支持通过异步方式提交数据导出任务。

应用场景

在使用INSERT INTOINSERT 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';