查询加速MaxQA操作指南

更新时间:2025-03-10 05:15:01

查询加速MaxQA(MaxCompute Query Accelerator)引擎旨在实现近实时场景下的查询性能优化,能够在独享的查询计算资源池中,对管控链路、查询优化器、执行引擎、存储引擎以及缓存机制等多个环节进行全面优化,适用于BI场景、交互式分析以及近实时数仓等低延迟高稳定的业务场景。本文将详细介绍MaxQA引擎的使用方法。

公测说明

MaxQA功能目前处于公测阶段,如需参与公测,请点击公测链接进行注册

各地域公测时间

地域

公测开始时间

地域

公测开始时间

华东1(杭州)

2025217

华东2(上海)

华北2(北京)

华南1(深圳)

华北6(乌兰察布)

中国香港

20250305

日本(东京)

20250305

新加坡

20250320

印度尼西亚(雅加达)

德国(法兰克福)

20250331

美国(硅谷)

美国(弗吉尼亚)

注意事项

  • 参与公测后,您新创建的交互式Quota组将默认为MaxQA模式,已开通的存量MCQA不受影响。如果您在参与MaxQA公测后,仍然想创建新的MCQA Quota,请提交工单

  • 为了帮助您更好地使用MaxQA功能,我们为您测试MaxQA新功能提供了100 CU的计算资源(有效期为1个月,价值15000 元)来降低您试用MaxQA的成本。

支持渠道

如您参与了公测,建议您扫描下方二维码加入MaxQA官方用户支持群(钉钉群号:87535025714),MaxCompute技术支持将协助您解决公测相关问题。image

MaxQA基础操作

MaxQA实例开通

目前仅支持在包年包月MaxCompute项目中使用MaxQA功能,具体操作如下:

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,单击工作区 > 配额(Quota)管理

  3. Quota管理页面,单击目标一级Quota操作列的Quota配置

  4. 进行基础配置。

    1. Quota配置页面的基础配置页签,单击编辑基础配置

    2. 单击+新建二级Quota,填写Quota名称并选择类型

      参数

      说明

      参数

      说明

      Quota名称

      自定义输入(后续使用MaxQA时,需要指定该名字,建议和业务属性相关,便于区分多个实例)。

      类型

      选择交互式

  5. 单击确定,即可完成一个MaxQA实例的开通。

开通之后,对应交互式配额组的最后部分会出现状态展示为启动中,请等待5~8分钟,待状态变更为运行中后,即可开始使用。

MaxQA实例删除

如您不再使用MaxQA实例,可进行删除。

  1. Quota管理页面,单击目标一级Quota操作列的Quota配置

  2. Quota配置页面的基础配置页签,单击目标交互式配额组操作列的删除

后台将自动执行删除操作,页面上不显示状态更新和删除进度。

MaxQA实例扩缩容

您可根据业务需求为交互式配额组进行扩容或缩容,具体操作如下。您也可通过配置定时伸缩计划来进行定时扩缩容,详情请参见MaxQA分时伸缩规则配置

  1. Quota管理页面,单击目标一级Quota操作列的Quota配置

  2. Quota配置页面的基础配置页签,单击编辑基础配置

  3. 调整要扩容或缩容的交互式配额组的预留CU量[minCU,maxCU]。调大即为扩容,调小即为缩容。

    说明
    • CU量的最小变化步长为32

    • 最小CU量必须大于等于32。如果不需要交互式资源,设置为0,或删除对应Quota组。

    • 暂不支持为交互式类型的Quota设置弹性预留CU。

  4. 单击确定,完成交互式配额组预留CU量的调节。

对应交互式配额组的操作列会显示扩容中缩容中,扩容预计耗时5~8分钟,而缩容可能耗时更长,具体时长取决于当前正在运行作业的结束情况。在最坏的情况下,可能需要等待作业超时,以确保在缩容操作开始之前,被缩容的机器上所有正在运行的作业均已结束。扩容及缩容过程中,均不会影响作业的正常执行。

MaxQA分时伸缩规则配置

您也可以通过配置分时伸缩计划来完成定时扩缩容,具体操作如下:

  1. Quota管理页面,单击目标一级Quota操作列的Quota配置

  2. Quota配置页面选择伸缩配置页签。

  3. 进行分时伸缩配置。

    1. 资源配置方案列表区域单击新增配置方案

    2. 新增配置方案对话框中,调整各交互式Quota组的预留CU量[minCU,maxCU]的值,并单击确定

    3. (可选)您也可单击已有配置方案操作列的编辑进行修改。

  4. 配置分时计划。

    1. 分时管理区域单击编辑时间计划

    2. 单击新增生效时间段,设置每日不同时间点启用不同的Quota配置方案,以此实现对Quota配置的分时管理。详细操作请参见计算资源-Quota管理

调度策略

提交作业时需要在客户端、JDBC连接串上显式指定交互式Quota组的名字,相应作业会被调度到对应的MaxQA实例中执行。

回退策略

MaxQA不支持自动回退的策略。如果因使用限制或其它原因发生MaxQA作业失败,您需要主动再次提交或提交到批处理配额组中。

MaxQA功能接入方式

MaxQA功能支持的接入方式如下:

基于MaxCompute客户端启用MaxQA功能

  1. 安装并配置V0.51.0及以上版本的MaxCompute客户端(odpscmd),详情请参见使用本地客户端(odpscmd)连接

  2. (可选)修改客户端安装目录conf下的odps_config.ini文件,在文件最后一行增加如下命令。

    enable_quota_cache=true --打开MaxQA 连接信息缓存功能
  3. 运行安装目录bin下的脚本文件,启动MaxCompute客户端。

    重要
    • Linux/macOS系统:运行odpscmd脚本文件。

    • Windows系统:双击odpscmd.bat文件。

  4. 运行作业前请执行以下命令,后续客户端提交的作业都将使用MaxQA模式,在交互式Quota组所对应的MaxQA实例中运行。

    USE QUOTA <交互式Quota组的名称>;

    您还可通过如下方式,在Session级别指明当前作业要提交的MaxQA实例。

    SET odps.task.wlm.quota=<交互式Quota组的名称>;

基于DataWorks数据开发启用MaxQA功能

重要

仅参加新版数据开发公测的工作空间支持MaxQA功能。若您使用旧版数据开发,需升级至新版数据开发,才能正常使用MaxQA功能。详情请参见Data Studio公测说明

  1. DataWorks数据开发页面,单击右侧调试配置

  2. 调试配置页面,计算资源选择绑定的MaxCompute项目资源,计算配额选择交互式配置组。

具体操作步骤,详情请参见DataWorks创建MaxCompute SQL节点

完成后,SQL节点执行的作业将会被调度到交互式配额组对应的MaxQA实例中运行。

data1

基于MaxCompute控制台SQL分析启动MaxQA功能

  1. 登录MaxCompute控制台,单击左侧导航栏的工作区 > SQL分析

  2. 进入SQL查询页面,并新建文本文件。

  3. 单击右侧运行参数,并在弹出页签中选择项目计算配额选择交互式配额组对应的计算资源。

具体操作步骤,详情请参见SQL分析

完成后,SQL分析页面执行的作业将会被调度到交互式配额组对应的MaxQA实例中运行。

data3

基于JDBC启用MaxQA功能

使用JDBC连接MaxCompute,您可以通过执行如下操作开启MaxQA功能。使用JDBC连接MaxCompute的操作详情请参见使用说明

  1. 下载支持MaxQA功能的或可编译的源代码

  2. 通过Maven方式配置Pom依赖。

    <dependency>
       <groupId>com.aliyun.odps</groupId>
       <artifactId>odps-jdbc</artifactId>
       <version>3.9.0-rc4</version>
    </dependency>
  3. 基于源代码创建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&quotaName=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&quotaName=your_quota_nick_name&autoSelectLimit=1000000000&enableOdpsLogger=true"

参数

说明

参数

说明

MaxCompute_endpoint

MaxCompute服务所在区域的Endpoint,详情请参见Endpoint

MaxCompute_project_name

MaxCompute项目空间名称。

charset=UTF-8

字符集编码格式。

interactiveMode

MaxQA功能开关,true表示开启MaxQA功能。

quotaName

期望使用的交互式Quota组名字

autoSelectLimit

数据量超过100万限制时,需要配置此参数。

enableOdpsLogger

用于打印日志。未配置SLF4J时,建议您将此参数配置为True。

基于BI分析工具连接MaxQA

您可通过Tableau、SQLWorkBenchFineBI连接MaxQA,具体操作如下。

Tableau连接MaxQA
SQLWorkBench连接MaxQA
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&quotaName=<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

    data5

  • URL示例:

    https://service.cn-hangzhou.maxcompute.aliyun.com/api?project=maxqatomax&charset=UTF-8&interactiveMode=true&quotaName=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&quotaName=<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&quotaName=maxfor1&autoSelectLimit=1000000000

FineBI连接MaxCompute使用MaxQA,只需要在URL路径添加交互式Quota组即可,详细步骤请参考FineBI连接MaxCompute

数据连接URL示例如下。

jdbc:odps:<MaxCompute_endpoint>?
project=<MaxCompute_project_name>&charset=UTF-8&interactiveMode=true&quotaName=<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

基于Java SDK启用MaxQA功能

Java SDK详情请参见Java SDK介绍

  1. 通过Maven配置Pom依赖,配置示例如下。

    <dependency>
      <groupId>com.aliyun.odps</groupId>
      <artifactId>odps-sdk-core</artifactId>
      <version>0.51.5-public</version>
    </dependency>
  2. 创建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功能

PyODPSV0.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>&quota_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

hh1

TopConsole的可观测页面判断

  1. 登录MaxCompute控制台,单击左侧导航栏的工作区 > 作业运维

  2. 作业运维页面,通过选择作业类型MCQA2,筛选指定时间内的MaxQA类型作业。

    p1

  • 本页导读 (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的可观测页面判断
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等