背景信息

OLAP场景中,为避免复杂SQL运行时间过长,程序一直阻塞等待而影响业务运行,DLA推出异步执行SQL功能,即在SQL中加入Hint/*+ run-async=true */。异步执行SQL时,查询结果将默认写入您的OSS目录中,同时系统返回SQL对应的ID,通过show query_task查询ID得到SQL任务的执行详情。

注意:在DLA中异步执行SQL时,必须开通OSS服务,存储SQL执行结果。

示例

例如,在DLA中通过/*+ run-async=true */异步执行SQL,系统将返回一个ID。

  1. mysql> /*+ run-async=true */select * from test_table1;
  2. +--------------------------------+
  3. | ASYNC_TASK_ID |
  4. +--------------------------------+
  5. | q201811021109sh8d1a0b750000182 |
  6. +--------------------------------+
  7. 1 row in set (0.04 sec)

通过show query_task查询ID,得到异步SQL执行详情。

  1. mysql> show query_task where id = 'q201811021109sh8d1a0b750000182'\G
  2. *************************** 1. row ***************************
  3. id: q201811021109sh8d1a0b750000182
  4. mpp_query_id: 20181102_030939_149_svnhw
  5. status: SUCCESS
  6. task_name: SELECT
  7. table_schema: sh_tpch
  8. command: /*+ run-async=true */select * from test_table1
  9. creator_id: ${您的dla账号}
  10. create_time: 2018-11-02 11:09:40.0
  11. update_time: 2018-11-02 11:09:40.0
  12. connection_id: 693929276088405
  13. message:
  14. row_count: 2
  15. elapse_time: 692
  16. scanned_data_bytes: 147
  17. result_file_oss_file: oss://aliyun-oa-query-results-${您的uid}-oss-cn-shanghai/DLA_Result/2018/11/02/q201811021109sh8d1a0b750000182/result.csv
  18. cancellable_task: 0
  19. mq_product: NULL
  20. mq_topic: NULL
  21. mq_producer_id: NULL
  22. mq_model: NULL
  23. mq_status: NULL
  24. mq_error_msg: NULL
  25. mq_message_id: NULL
  26. mq_total_time: NULL
  27. 1 row in set (0.02 sec)

参数说明

  • status

    • 值为SUCCESS时,表示SQL执行成功。

    • 值为RUNNING时,表示SQL正在运行中。

    • 值为FAILURE时,表示SQL执行失败。

    • 值为CANCELLED时,表示用户取消SQL执行任务。

  • result_file_oss_file: 存储SQL查询结果的OSS地址。

  • elapse_time:执行整个SQL任务花费的时间。

  • scanned_data_bytes:SQL扫描的数据量,DLA根据扫描的字节(Byte)数收费。

结论

上述方法确实实现了异步执行SQL,并且也得到了SQL任务的执行详情,但需要在程序中反复执行show query_task来确认SQL任务的状态是否从RUNNING变为SUCCESS,对用户的程序影响很大,急需方便、快捷的通知机制。

DLA支持将消息写入阿里云消息队列(Message Queue,简称MQ)、消息服务(Message Service,简称MNS,原MQS)或者钉钉机器人,帮助您快速、异步感知任务执行状态。