全部產品
Search
文件中心

MaxCompute:查詢加速MaxQA操作指南

更新時間:Dec 05, 2025

查詢加速MaxQA(MaxCompute Query Accelerator)引擎旨在實現近即時情境下的查詢效能最佳化,能夠在獨享的查詢計算資源集區中,對管控鏈路、查詢最佳化工具、執行引擎、儲存引擎以及緩衝機制等多個環節進行全面最佳化,適用於BI情境、互動式分析以及近即時數倉等低延遲高穩定的業務情境。本文將詳細介紹MaxQA引擎的使用方法。

開服說明

各地區正式商業化時間

地區

公測開始時間

正式商業化時間

華東1(杭州)

2025年2月17日

2025年11月24日

華東2(上海)

華北2(北京)

華南1(深圳)

華北6(烏蘭察布)

中國香港

2025年03月05日

2025年11月27日

日本(東京)

2025年03月05日

新加坡

2025年03月20日

印尼(雅加達)

德國(法蘭克福)

2025年03月31日

美國(矽谷)

美國(維吉尼亞)

注意事項

新建立的互動式Quota組將預設為MaxQA模式,已開通的存量MCQA不受影響。

MaxQA基礎操作

MaxQA執行個體開通

目前僅支援在訂用帳戶MaxCompute專案中使用MaxQA功能,具體操作如下:

  1. 登入MaxCompute控制台,在左上方選擇地區。

  2. 在左側導覽列,選擇管理配置 > 配额(Quota)管理 。

  3. Quota管理頁面,單擊目標Quota對應操作列的Quota配置

  4. 基礎配置

    1. Quota配置頁面,選擇基础配置頁簽,單擊编辑基础配置

    2. 單擊新增二级Quota,填寫Quota名称並選擇类型交互式

      • 後續使用MaxQA時,需要指定Quota名称,建議和業務屬性相關,便於區分多個執行個體。

      • 交互式是專用於跑查詢加速(MCQA)作業的Quota。

  5. 單擊确定

開通之後,對應互動式配額組的最後部分會出現狀態展示為启动中,請等待5~8分鐘,待狀態變更為运行中後,即可開始使用。

MaxQA執行個體刪除

  1. Quota管理頁面,單擊目標Quota對應操作列的Quota配置

  2. Quota配置頁面,選擇基础配置頁簽,單擊目標互動式Quota操作列的删除

後台將自動執行刪除操作,頁面上不顯示狀態更新和刪除進度。

MaxQA執行個體擴縮容

可根據業務需求為互動式配額組進行擴容或縮容,具體操作如下:

  1. Quota管理頁面,單擊目標Quota對應操作列的Quota配置

  2. Quota配置頁面,選擇基础配置頁簽,單擊编辑基础配置

  3. 單擊新增二级Quota,調整要擴容或縮容的互動式配額組的预留CU量[minCU,maxCU]。調大即為擴容,調小即為縮容。

    說明
    • CU量的最小變化步長為25

    • 最小CU量必須大於等於25。如果不需要互動式資源,設定為0,或刪除對應Quota組。

    • 暫不支援為互動式類型的Quota設定弹性预留CU

  4. 單擊确定

    完成調節互動式配額組預留CU量。

對應互動式配額組的操作列會顯示扩容中缩容中,擴容預計耗時5~8分鐘,而縮容可能耗時更長,具體時間長度取決於當前正在運行作業的結束情況。在最壞的情況下,可能需要等待作業逾時,以確保在縮容操作開始之前,被縮容的機器上所有正在啟動並執行作業均已結束。擴容及縮容過程中,均不會影響作業的正常執行。

MaxQA分時伸縮規則配置

通過配置分時伸縮計劃可以完成定時擴縮容,具體操作如下:

  1. Quota管理頁面,單擊目標Quota對應操作列的Quota配置

  2. Quota配置頁面,選擇伸缩配置頁簽。

  3. 分時伸縮配置

    1. 伸缩配置頁簽,單擊新增配置方案,在彈出的新增配置方案對話方塊,填寫配置方案名称,並為二級Quota配置预留CU量[minCU,maxCU]

    2. 若修改已有配置方案:

      伸缩配置頁簽,單擊目標配置方案對應的操作列的编辑,更新配置方案。

  4. 配置分時計劃

    1. 伸缩配置頁簽,單擊分时管理地區的编辑时间计划

    2. 單擊新增生效时间段,選擇生效開始時間配置方案计划

      設定每日不同時間點啟用不同的Quota配置方案,以此實現對Quota配置的分時管理。詳細操作請參見計算資源-Quota管理

調度策略

提交作業時需要在用戶端、JDBC串連串上顯式指定互動式Quota組的名字,相應作業會被調度到對應的MaxQA執行個體中執行。

回退策略

MaxQA不支援自動回退的策略。如果因使用限制或其它原因發生MaxQA作業失敗,需要主動再次提交或提交到批處理配額組中。

MaxQA功能接入方式

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

基於MaxCompute用戶端啟用MaxQA功能

  1. 安裝並配置V0.51.1及以上版本的MaxCompute用戶端(odpscmd),詳情請參見使用本地用戶端(odpscmd)串連

  2. (可選)修改用戶端安裝目錄conf下的odps_config.ini檔案,在檔案最後一行增加如下命令。

    -- 開啟MaxQA 串連資訊緩衝功能。
    enable_quota_cache=true
  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. 在左側導覽列選擇数据开发与运维 > 数据开发

  3. 选择工作空间,單擊進入Data Studio

  4. 在資料開發頁面,單擊右側調試配置

  5. 調試配置頁面,計算資源選擇綁定的MaxCompute專案資源,計算配額選擇互動式配置組。

  6. 完成後,SQL節點執行的作業將會被調度到互動式配額組對應的MaxQA執行個體中運行。

image

具體操作步驟,詳情請參見DataWorks建立MaxCompute SQL節點

基於MaxCompute控制台SQL分析啟動MaxQA功能

  1. 登入MaxCompute控制台,在左上方選擇地區。

  2. 在左側導覽列,選擇数据探索 > SQL分析

  3. 在SQL代碼編輯框輸入SQL後,單擊右側運行參數,配置專案計算配額

  4. 選擇互動式配額組對應的計算資源。

  5. 配置完成後,SQL分析頁面執行的作業將會被調度到互動式配額組對應的MaxQA執行個體中運行。

具體操作步驟,詳情請參見SQL分析

基於MaxCompute Studio使用MaxQA功能

需要確認已安裝MaxCompute Studio,並完成對MaxCompute專案的串連。再通過MaxCompute Studio執行指令碼來使用MaxQA功能。具體操作如下:

  1. 已安裝並配置MaxCompute Studio 4.3.2及以上版本,詳情請參見安裝MaxCompute Studio

  2. 建立新的MaxCompute Studio專案,並與MaxCompute專案進行串連。詳情請參見管理專案串連

  3. 在已建立的專案中建立新的MaxCompute SQL指令碼。詳情請參見開發及提交SQL指令碼

  4. 在MaxCompute SQL指令碼中輸入SQL Script語句,在執行模式中下拉選擇MaxQA選項。

  5. 單擊指定額外參數image按鈕,填寫MaxQA Quota名稱,單擊確定完成。

  6. 運行指令碼。該作業使用MaxQA查詢加速功能。

基於JDBC啟用MaxQA功能

使用JDBC串連MaxCompute,可以通過執行如下操作開啟MaxQA功能。使用JDBC串連MaxCompute的操作詳情請參見使用說明

  1. 下載支援MaxQA功能的或可編譯的原始碼

  2. 通過Maven方式配置Pom依賴。

    <dependency>
       <groupId>com.aliyun.odps</groupId>
       <artifactId>odps-jdbc</artifactId>
       <version>${Latest Version}</version>
    </dependency>
    重要

    上述代碼中的Latest Version是一個預留位置,需要將其替換為具體的SDK版本號碼才能成功編譯專案。訪問Maven Central Repository查看所有發行的odps-jdbc版本。建議使用最新版本,版本號碼格式為 X.X.X。

  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>&interactiveMode=true&quotaName=your_quota_nick_name&enableLimit=false&enableOdpsLogger=true"

參數

說明

MaxCompute_endpoint

MaxCompute服務所在地區的Endpoint,詳情請參見Endpoint

MaxCompute_project_name

MaxCompute專案空間名稱。

interactiveMode

MaxQA功能開關,true表示開啟MaxQA功能。

quotaName

期望使用的互動式Quota組名字

enableLimit

允許下載超過 10000 條資料

enableOdpsLogger

用於列印日誌。未配置SLF4J時,建議將此參數配置為True。

基於BI分析工具串連MaxQA

可通過Tableau、Quick BI、觀遠BI、SQLWorkBench串連MaxQA,具體操作如下。

Tableau串連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

Quick BI串連MaxQA

  1. 登入QuickBI控制台

  2. 在左側導覽列選擇資料來源,單擊右上方建立資料來源

  3. 建立資料來源頁面選擇MaxCompute

  4. 配置串連頁面中,Quota計算資源群組填寫MaxQA Quota計算資源名稱,開啟MaxQA功能並使用MaxQA計算資源。詳情請參見Quick BI串連MaxCompute

樣本如下,maxqa為MaxQA Quota名稱:

image

觀遠BI串連MaxQA

  1. 新增驅動。

    上傳V3.8.5及以上版本的MaxCompute JDBC Driver至觀遠BI。詳情請參見MaxCompute JDBCRelease Note

    1. 在觀遠BI右上方單擊image表徵圖,進入管理中心

    2. 單擊系統設定>通用設定,並切換至驅動與連接器頁面。

    3. 驅動管理頁簽單擊新增驅動後,編輯驅動名稱並儲存。

    4. 單擊新增的驅動名稱,在驅動列表處單擊上傳檔案,上傳MaxCompute JDBC Driver,然後選擇驅動為com.aliyun.odps.jdbc.OdpsDriver,單擊應用即可。

  2. 建立資料賬戶,通過MaxQA方式串連MaxCompute資料來源。

    1. 單擊頂部功能表列的資料準備

    2. 在頁面左側選擇資料賬戶頁簽,並在右上方單擊建立資料賬戶,根據頁面指引配置賬戶資訊。

      參數

      說明

      選擇連接器

      選擇MaxCompute

      配置資料賬戶

      串連方式

      選擇JDBC URL

      登入ID

      阿里雲帳號的AccessKey ID。

      登入Key

      阿里雲帳號對應的AccessKey Secret。

      JDBC URL

      針對MaxQA定製的JDBC串連串,URL格式為:jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_projectName>&charset=UTF-8&interactiveMode=true&quotaName=<your_quota_nickName>&autoSelectLimit=1000000000

      參數說明如下:

      • maxcompute_endpoint:MaxCompute服務所在地區的Endpoint,詳情請參見Endpoint。杭州地區如:https://service.cn-hangzhou.maxcompute.aliyun.com/api

      • maxcompute_projectName:MaxCompute專案名稱,如maxqatomax

      • your_quota_nickName:期望使用的互動式Quota組的名稱,如maxfor1。互動式Quota組的建立詳情,請參見計算資源-Quota管理

      URL樣本如下:

      jdbc:odps:https://service.cn-hangzhou.maxcompute.aliyun.com/api?project=maxqatomax&charset=UTF-8&interactiveMode=true&quotaName=maxfor1&autoSelectLimit=1000000000

      SQL版本

      選擇2.0/hive相容模式

      最大串連數

      預設16

      驅動

      選擇自訂,然後選擇上述已建立的驅動。

    3. 單擊測試連接,顯示串連成功後,單擊下一步

    4. 確認資料賬戶資訊,自訂輸入顯示名稱,單擊確認建立即可。

SQLWorkBench串連MaxQA

在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

基於Java SDK啟用MaxQA功能

Java SDK詳情請參見Java SDK介紹

  1. 通過Maven配置Pom依賴,配置樣本如下。

    <dependency>
      <groupId>com.aliyun.odps</groupId>
      <artifactId>odps-sdk-core</artifactId>
      <version>${Latest Version}</version>
    </dependency>
    重要

    上述代碼中的Latest Version是一個預留位置,需要將其替換為具體的SDK版本號碼才能成功編譯專案。訪問Maven Central Repository查看所有發行的odps-sdk-core版本。建議使用最新版本,版本號碼格式為 X.X.X-public。

  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功能

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>&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. 在左側導覽列,選擇观测运维 > 作业运维

  3. 作业运维頁面,單擊普通列表頁簽,篩選作业类型MCQA2,查看指定时间范围內的MaxQA類型作業。