查询加速MaxQA(MaxCompute Query Accelerator)引擎旨在实现近实时场景下的查询性能优化,能够在独享的查询计算资源池中,对管控链路、查询优化器、执行引擎、存储引擎以及缓存机制等多个环节进行全面优化,适用于BI场景、交互式分析以及近实时数仓等低延迟高稳定的业务场景。本文将详细介绍MaxQA引擎的使用方法。
公测说明
MaxQA功能目前处于公测阶段,如需参与公测,请点击公测链接进行注册。
各地域公测时间
地域 | 公测开始时间 |
地域 | 公测开始时间 |
华东1(杭州) | 2025年2月17日 |
华东2(上海) | |
华北2(北京) | |
华南1(深圳) | |
华北6(乌兰察布) | |
中国香港 | 2025年03月05日 |
日本(东京) | 2025年03月05日 |
新加坡 | 2025年03月20日 |
印度尼西亚(雅加达) | |
德国(法兰克福) | 2025年03月31日 |
美国(硅谷) | |
美国(弗吉尼亚) |
注意事项
参与公测后,您新创建的交互式Quota组将默认为MaxQA模式,已开通的存量MCQA不受影响。如果您在参与MaxQA公测后,仍然想创建新的MCQA Quota,请提交工单。
为了帮助您更好地使用MaxQA功能,我们为您测试MaxQA新功能提供了100 CU的计算资源(有效期为1个月,价值15000 元)来降低您试用MaxQA的成本。
支持渠道
如您参与了公测,建议您扫描下方二维码加入MaxQA官方用户支持群(钉钉群号:87535025714),MaxCompute技术支持将协助您解决公测相关问题。
MaxQA基础操作
MaxQA实例开通
目前仅支持在包年包月MaxCompute项目中使用MaxQA功能,具体操作如下:
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,单击
。在Quota管理页面,单击目标一级Quota操作列的Quota配置。
进行基础配置。
在Quota配置页面的基础配置页签,单击编辑基础配置。
单击+新建二级Quota,填写Quota名称并选择类型。
参数
说明
参数
说明
Quota名称
自定义输入(后续使用MaxQA时,需要指定该名字,建议和业务属性相关,便于区分多个实例)。
类型
选择交互式。
单击确定,即可完成一个MaxQA实例的开通。
开通之后,对应交互式配额组的最后部分会出现状态展示为启动中,请等待5~8分钟,待状态变更为运行中后,即可开始使用。
MaxQA实例删除
如您不再使用MaxQA实例,可进行删除。
在Quota管理页面,单击目标一级Quota操作列的Quota配置。
在Quota配置页面的基础配置页签,单击目标交互式配额组操作列的删除。
后台将自动执行删除操作,页面上不显示状态更新和删除进度。
MaxQA实例扩缩容
您可根据业务需求为交互式配额组进行扩容或缩容,具体操作如下。您也可通过配置定时伸缩计划来进行定时扩缩容,详情请参见MaxQA分时伸缩规则配置。
在Quota管理页面,单击目标一级Quota操作列的Quota配置。
在Quota配置页面的基础配置页签,单击编辑基础配置。
调整要扩容或缩容的交互式配额组的预留CU量[minCU,maxCU]。调大即为扩容,调小即为缩容。
CU量的最小变化步长为32。
最小CU量必须大于等于32。如果不需要交互式资源,设置为
0
,或删除对应Quota组。暂不支持为交互式类型的Quota设置弹性预留CU。
单击确定,完成交互式配额组预留CU量的调节。
对应交互式配额组的操作列会显示扩容中或缩容中,扩容预计耗时5~8分钟,而缩容可能耗时更长,具体时长取决于当前正在运行作业的结束情况。在最坏的情况下,可能需要等待作业超时,以确保在缩容操作开始之前,被缩容的机器上所有正在运行的作业均已结束。扩容及缩容过程中,均不会影响作业的正常执行。
MaxQA分时伸缩规则配置
您也可以通过配置分时伸缩计划来完成定时扩缩容,具体操作如下:
在Quota管理页面,单击目标一级Quota操作列的Quota配置。
在Quota配置页面选择伸缩配置页签。
进行分时伸缩配置。
在资源配置方案列表区域单击新增配置方案。
在新增配置方案对话框中,调整各交互式Quota组的预留CU量[minCU,maxCU]的值,并单击确定。
(可选)您也可单击已有配置方案操作列的编辑进行修改。
配置分时计划。
在分时管理区域单击编辑时间计划。
单击新增生效时间段,设置每日不同时间点启用不同的Quota配置方案,以此实现对Quota配置的分时管理。详细操作请参见计算资源-Quota管理。
调度策略
提交作业时需要在客户端、JDBC连接串上显式指定交互式Quota组的名字,相应作业会被调度到对应的MaxQA实例中执行。
回退策略
MaxQA不支持自动回退的策略。如果因使用限制或其它原因发生MaxQA作业失败,您需要主动再次提交或提交到批处理配额组中。
MaxQA功能接入方式
MaxQA功能支持的接入方式如下:
基于MaxCompute客户端启用MaxQA功能
安装并配置V0.51.0及以上版本的MaxCompute客户端(odpscmd),详情请参见使用本地客户端(odpscmd)连接。
(可选)修改客户端安装目录
conf
下的odps_config.ini
文件,在文件最后一行增加如下命令。enable_quota_cache=true --打开MaxQA 连接信息缓存功能
运行安装目录
bin
下的脚本文件,启动MaxCompute客户端。Linux/macOS系统:运行
odpscmd
脚本文件。Windows系统:双击
odpscmd.bat
文件。
运行作业前请执行以下命令,后续客户端提交的作业都将使用MaxQA模式,在交互式Quota组所对应的MaxQA实例中运行。
USE QUOTA <交互式Quota组的名称>;
您还可通过如下方式,在Session级别指明当前作业要提交的MaxQA实例。
SET odps.task.wlm.quota=<交互式Quota组的名称>;
基于DataWorks数据开发启用MaxQA功能
仅参加新版数据开发公测的工作空间支持MaxQA功能。若您使用旧版数据开发,需升级至新版数据开发,才能正常使用MaxQA功能。详情请参见Data Studio公测说明。
在DataWorks数据开发页面,单击右侧调试配置。
在调试配置页面,计算资源选择绑定的MaxCompute项目资源,计算配额选择交互式配置组。
具体操作步骤,详情请参见DataWorks创建MaxCompute SQL节点。
完成后,SQL节点执行的作业将会被调度到交互式配额组对应的MaxQA实例中运行。
基于MaxCompute控制台SQL分析启动MaxQA功能
登录MaxCompute控制台,单击左侧导航栏的工作区 > SQL分析。
进入SQL查询页面,并新建文本文件。
单击右侧运行参数,并在弹出页签中选择项目,计算配额选择交互式配额组对应的计算资源。
具体操作步骤,详情请参见SQL分析。
完成后,SQL分析页面执行的作业将会被调度到交互式配额组对应的MaxQA实例中运行。
基于JDBC启用MaxQA功能
使用JDBC连接MaxCompute,您可以通过执行如下操作开启MaxQA功能。使用JDBC连接MaxCompute的操作详情请参见使用说明。
下载支持MaxQA功能的或可编译的源代码。
通过Maven方式配置Pom依赖。
<dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-jdbc</artifactId> <version>3.9.0-rc4</version> </dependency>
基于源代码创建Java程序,适配实际信息,详情请参见MaxCompute JDBC,示例如下。
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MaxCompute { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户 // 此处以把AccessKey和AccessKeySecret保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里 // 强烈建议不要把AccessKey和AccessKeySecret保存到代码里,会存在密钥泄漏风险 private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) throws SQLException { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection conn = DriverManager.getConnection( "jdbc:odps:https://service.cn-hangzhou.maxcompute.aliyun.com/api?project=maxqatomax&charset=UTF-8&interactiveMode=true"aName=maxfor1&autoSelectLimit=1000000000", MaxCompute.accessId, MaxCompute.accessKey); // create a table Statement stmt = conn.createStatement(); final String tableName = "jdbc_test11"; stmt.execute("DROP TABLE IF EXISTS " + tableName); stmt.execute("CREATE TABLE " + tableName + " (key BIGINT, value STRING)"); // get meta data DatabaseMetaData metaData = conn.getMetaData(); System.out.println("product = " + metaData.getDatabaseProductName()); System.out.println("jdbc version = " + metaData.getDriverMajorVersion() + ", " + metaData.getDriverMinorVersion()); ResultSet tables = metaData.getTables(null, "default", tableName, null); while (tables.next()) { String name = tables.getString("TABLE_NAME"); System.out.println("inspecting table: " + name); ResultSet columns = metaData.getColumns(null, null, name, null); while (columns.next()) { System.out.println( columns.getString("COLUMN_NAME") + "\t" + columns.getString("TYPE_NAME") + "(" + columns.getInt("DATA_TYPE") + ")"); } columns.close(); } tables.close(); stmt.close(); conn.close(); } }
JDBC连接串配置示例。
//your_quota_nick_name为期望使用的交互式 Quota 组的名字
jdbc:odps:<MaxCompute_endpoint>?
project=<MaxCompute_project_name>&charset=UTF-8&interactiveMode=true"aName=your_quota_nick_name&autoSelectLimit=1000000000&enableOdpsLogger=true"
参数 | 说明 |
参数 | 说明 |
MaxCompute_endpoint | MaxCompute服务所在区域的Endpoint,详情请参见Endpoint。 |
MaxCompute_project_name | MaxCompute项目空间名称。 |
charset=UTF-8 | 字符集编码格式。 |
interactiveMode | MaxQA功能开关, |
quotaName | 期望使用的交互式Quota组名字 |
autoSelectLimit | 数据量超过100万限制时,需要配置此参数。 |
enableOdpsLogger | 用于打印日志。未配置SLF4J时,建议您将此参数配置为True。 |
基于BI分析工具连接MaxQA
您可通过Tableau、SQLWorkBench或FineBI连接MaxQA,具体操作如下。
服务器URL路径增加interactiveMode=true
属性和quotaName=your_quota_nick_name
属性,用于开启MaxQA功能。建议您同步增加enableOdpsLogger=true
属性,用于打印日志。具体操作步骤,详情请参见配置JDBC使用Tableau。
URL格式:
<MaxCompute_endpoint>?project=<MaxCompute_project_name>&charset=UTF-8&interactiveMode=true"aName=<your_quota_nick_name>&autoSelectLimit=1000000000
参数
是否必填
说明
MaxCompute_endpoint
是
MaxCompute服务所在区域的Endpoint,详情请参见Endpoint。杭州地域如:
https://service.cn-hangzhou.maxcompute.aliyun.com/api
。MaxCompute_project_name
是
MaxCompute项目名称,如
maxqatomax
。your_quota_nick_name
是
期望使用的交互式Quota组的名称,如
maxfor1
。URL示例:
https://service.cn-hangzhou.maxcompute.aliyun.com/api?project=maxqatomax&charset=UTF-8&interactiveMode=true"aName=maxfor1&autoSelectLimit=1000000000
在Profile配置界面修改已填写的JDBC URL,支持SQLWorkbench使用MaxQA功能。具体操作详情请参见配置JDBC使用SQL Workbench/J。
URL格式:
jdbc:odps:<MaxCompute_endpoint>? project=<MaxCompute_project_name>&charset=UTF-8&interactiveMode=true"aName=<your_quota_nick_name>&autoSelectLimit=1000000000"
参数
是否必填
说明
MaxCompute_endpoint
是
MaxCompute服务所在区域的Endpoint,详情请参见Endpoint。杭州地域如:
https://service.cn-hangzhou.maxcompute.aliyun.com/api
。MaxCompute_project_name
是
MaxCompute项目名称,如
maxqatomax
。your_quota_nick_name
是
期望使用的交互式Quota组的名称,如
maxfor1
。URL示例:
jdbc:odps:https://service.cn-hangzhou.maxcompute.aliyun.com/api?project=maxqatomax&charset=UTF-8&interactiveMode=true"aName=maxfor1&autoSelectLimit=1000000000
FineBI连接MaxCompute使用MaxQA,只需要在URL路径添加交互式Quota组即可,详细步骤请参考FineBI连接MaxCompute。
数据连接URL示例如下。
jdbc:odps:<MaxCompute_endpoint>?
project=<MaxCompute_project_name>&charset=UTF-8&interactiveMode=true"aName=<your_quota_nick_name>&autoSelectLimit=1000000000"
参数 | 是否必填 | 说明 |
MaxCompute_endpoint | 是 | MaxCompute服务所在区域的Endpoint,详情请参见Endpoint。杭州地域如: |
MaxCompute_project_name | 是 | MaxCompute项目名称,如 |
your_quota_nick_name | 是 | 期望使用的交互式Quota组的名称,如 |
基于Java SDK启用MaxQA功能
Java SDK详情请参见Java SDK介绍。
通过Maven配置Pom依赖,配置示例如下。
<dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-sdk-core</artifactId> <version>0.51.5-public</version> </dependency>
创建Java程序,命令示例如下。
import com.aliyun.odps.Odps; import com.aliyun.odps.OdpsException; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; import com.aliyun.odps.sqa.ExecuteMode; import com.aliyun.odps.sqa.SQLExecutor; import com.aliyun.odps.sqa.SQLExecutorBuilder; import java.util.HashMap; import java.util.Map; public class MaxCompute { public static void main(String args[]) { // 设置账号和项目信息。 // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户 // 此处以把AccessKey 和 AccessKeySecret 保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里 // 强烈建议不要把 AccessKey 和 AccessKeySecret 保存到代码里,会存在密钥泄漏风险 Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); Odps odps = new Odps(account); odps.setDefaultProject("maxqatomax"); odps.setEndpoint("https://service.cn-hangzhou.maxcompute.aliyun.com/api"); // 准备构建SQLExecutor。 SQLExecutorBuilder builder = SQLExecutorBuilder.builder(); SQLExecutor sqlExecutor = null; try { // 创建一个默认使用 MCQA2.0 模式的Executor。 sqlExecutor = builder.odps(odps) .executeMode(ExecuteMode.INTERACTIVE) .quotaName("maxfor1") .enableMcqaV2(true) .build(); // 如果需要的话可以传入查询的特殊设置。 Map<String, String> queryHint = new HashMap<>(); queryHint.put("odps.sql.mapper.split.size", "128"); // 提交一个查询作业,支持传入Hint。 sqlExecutor.run("select count(1) from test_table;", queryHint); // 当前查询作业的logview。 System.out.println("Logview:" + sqlExecutor.getLogView()); // 当前查询作业的InstanceId System.out.println("InstanceId:" + sqlExecutor.getQueryId()); } catch (OdpsException e) { e.printStackTrace(); } finally { if (sqlExecutor != null) { // 关闭Executor释放相关资源。 sqlExecutor.close(); } } } }
基于PyODPS使用MaxQA功能
PyODPS从V0.12.1版本开始支持MaxQA功能,示例代码如下。
import os
from odps import ODPS
# 设置账号和项目信息
# 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
# 不建议直接使用 Access Key ID / Access Key Secret 字符串
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='maxto****',
endpoint='https://service.cn-hangzhou.maxcompute.aliyun.com/api',
)
# 如果需要的话可以传入查询的特殊设置
hints = {"odps.sql.mapper.split.size": "128"}
inst = o.execute_sql_interactive(
'select count(1) from test_table',
use_mcqa_v2=True,
quota_name='maxfor1',
# quota_name 设置为 MaxQA 实例所对应的交互式 Quota 组名字
hints=hints,
)
# 当前查询作业的logview
print(inst.get_logview_address())
# 当前查询作业的InstanceId
print(inst.id)
# 按行读取数据
with inst.open_reader() as reader:
result = [res.values for res in reader]
基于PyODPS使用SQLAlchemy或其他支持SQLAlchemy接口的第三方工具实现查询加速
PyODPS 0.12.2版本起可以使用SQLAlchemy通过MaxQA查询MaxCompute数据。您需要在连接串中指定如下参数。
参数 | 是否必填 | 说明 |
参数 | 是否必填 | 说明 |
interactive_mode=v2 | 是 | 查询加速功能总开关。 |
quota_name=<YOUR_INTERACTIVE_QUOTA_NICKNAME> | 是 | 您的交互式Quota名称。 |
reuse_odps=true | 否 | 打开强制复用连接,对于部分第三方工具(例如Apache Superset),打开此选项可提高性能。 |
例如,下述连接字符串打开MaxQA并打开强制复用链接。
odps://<access_id>:<ACCESS_KEY>@<project>/?endpoint=<endpoint>"a_name=<YOUR_INTERACTIVE_QUOTA_NICKNAME>&interactive_mode=v2&reuse_odps=true
确认作业是否启用MaxQA模式
从Logview判断
您可以在作业执行完成后,进入LogView页面,通过以下三处来确认作业是否启用MaxQA模式。
通过MaxCompute InstanceId后缀是否以_mcqa结尾。
通过Quota Nickname是否是指定的交互式Quota名称。
在Summary页签,查看Job run mode是否是mcqa 2.0。
从TopConsole的可观测页面判断
登录MaxCompute控制台,单击左侧导航栏的工作区 > 作业运维。
在作业运维页面,通过选择作业类型为MCQA2,筛选指定时间内的MaxQA类型作业。
- 本页导读 (1)
- 公测说明
- 各地域公测时间
- 注意事项
- 支持渠道
- MaxQA基础操作
- MaxQA实例开通
- MaxQA实例删除
- MaxQA实例扩缩容
- MaxQA分时伸缩规则配置
- 调度策略
- 回退策略
- MaxQA功能接入方式
- 基于MaxCompute客户端启用MaxQA功能
- 基于DataWorks数据开发启用MaxQA功能
- 基于MaxCompute控制台SQL分析启动MaxQA功能
- 基于JDBC启用MaxQA功能
- 基于BI分析工具连接MaxQA
- 基于Java SDK启用MaxQA功能
- 基于PyODPS使用MaxQA功能
- 确认作业是否启用MaxQA模式
- 从Logview判断
- 从TopConsole的可观测页面判断