本文以异步查询OSS数据为例,介绍如何在DLA中使用MNS做消息回执通知。
前提条件
- 说明
在DLA中异步执行SQL时,必须开通OSS服务,存储SQL执行结果。
- 说明
MNS和DLA所属Region相同。
操作步骤
新建RAM角色。
使用DLA所属账号登录RAM控制台。
单击RAM角色管理 > 新建RAM角色,在新建RAM角色页面进行以下配置。
可信实体类型选择阿里云账号。
受信云账号选择当前云账号。
RAM角色名称为
AliyunOpenAnalyticsAccessingMNSRole
。
修改角色授信策略。
在RAM角色列表中单击刚刚创建的角色,切换至RAM角色内容页签,单击修改信任策略,用以下策略替换原始策略。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "openanalytics.aliyuncs.com" ] } } ], "Version": "1" }
修改角色权限。
在RAM角色列表中单击刚刚创建的角色,单击角色右侧的添加权限为角色添加系统权限策略
AliyunMNSFullAccess
。异步执行SQL并使用MNS做消息回执通知。
语法
/*+ run_async=true, mq-notify-by=mns, mq-queue=${您的mns队列} */ select * from xxxx ....;
示例
/*+ run-async=true,mq-notify-by=mns,mq-queue=dla */ select * from oss_schema.oss_json;
执行上述SQL,得到SQL任务ID
ASYNC_TASK_ID
,例如q201903251653hze921092f0012820
。通过show query_task
得到mq_message_id
。mysql> show query_task where id = 'q201903251653hze921092f0012820'\G *************************** 1. row *************************** id: q201903251653hze921092f0012820 mpp_query_id: 20190322_120525_12951_rdxtt status: SUCCESS task_name: SELECT table_schema: oss_schema command: /*+ run-async=true,mq-notify-by=mns,mq-queue=dla */ select * from oss_schema.oss_json creator_id: ${您的dla账号} create_time: 2019-03-25 16:04:55 update_time: 2019-03-25 16:04:55 connection_id: 49409305027991 message: row_count: 4 elapse_time: 351 scanned_row_count: 4 scanned_data_bytes: 230 result_file_oss_file: oss://aliyun-oa-query-results-****-oss-cn-hangzhou/DLA_Result/2019/03/25/q201903251653hze921092f0012820/result.csv cancellable_task: 0 mq_product: mns mq_model: queue mq_topic: NULL mq_queue: dla mq_producer_id: NULL mq_endpoint: http://${您的uid}.mns.cn-hangzhou-internal.aliyuncs.com mq_status: SUCCESS mq_error_msg: NULL mq_message_id: 76218C7EAF7361357FA57F38FB3BD66F mq_total_time: 307 1 row in set (0.02 sec)
mq_message_id
就是MNS返回的id76218C7EAF7361357FA57F38FB3BD66F
,通过mq_message_id
,可以在MNS控制台上接收DLA消息。MNS成功接收DLA消息后,您就可以通过MNS实时了解DLA异步执行SQL的任务详情。关于MNS,请参见什么是消息服务MNS。
文档内容是否对您有帮助?