查詢加速(MCQA2.0)beta版本
本文為您介紹MaxCompute查詢加速升級(jí)MCQA2.0(MaxCompute Query Acceleration 2.0)引擎功能,并幫助您了解該功能的系統(tǒng)架構(gòu)、應(yīng)用場景、使用限制和使用方法。
功能介紹
MaxCompute MCQA2.0功能提供如下能力:
支持對中小數(shù)據(jù)量(百GB規(guī)模內(nèi))查詢作業(yè)、數(shù)據(jù)插入作業(yè)進(jìn)行加速優(yōu)化,最快執(zhí)行時(shí)間為亞秒級(jí)。
完全兼容MaxCompute的SQL功能,包括UDF、Delta Table、增量物化視圖特性等。
支持隔離的查詢加速資源池,獨(dú)享服務(wù)于本租戶,穩(wěn)定性更高。
支持自定義查詢加速資源池和批處理資源池的分時(shí)資源分配規(guī)則,提高資源整體利用率。
支持全鏈路Cache,作業(yè)會(huì)自動(dòng)將多個(gè)環(huán)節(jié)的執(zhí)行結(jié)果寫入臨時(shí)緩存,后續(xù)執(zhí)行的作業(yè)在全鏈路的多個(gè)環(huán)節(jié)都可能命中Cache,加快執(zhí)行速度。
產(chǎn)品架構(gòu)
MCQA2.0架構(gòu)圖如下所示。
應(yīng)用場景
MCQA2.0功能的應(yīng)用場景如下。
場景 | 說明 | 場景特點(diǎn) |
即席查詢(Ad Hoc) | 您可以通過MCQA2.0優(yōu)化中小規(guī)模數(shù)據(jù)集的查詢性能,直接對MaxCompute表進(jìn)行低時(shí)延的查詢操作,以便快速完成數(shù)據(jù)開發(fā)及數(shù)據(jù)分析。 | 您可以根據(jù)實(shí)際需求,靈活選擇查詢條件,快速獲取查詢結(jié)果并調(diào)整查詢邏輯。對查詢時(shí)延的要求在幾十秒內(nèi)。使用者通常為掌握SQL技能的數(shù)據(jù)開發(fā)或數(shù)據(jù)分析師,希望使用熟悉的客戶端工具開展查詢分析。 |
商業(yè)智能(BI) | 利用MaxCompute搭建企業(yè)級(jí)數(shù)據(jù)倉庫時(shí),ETL會(huì)將數(shù)據(jù)加工處理為面向業(yè)務(wù)可消費(fèi)的聚合數(shù)據(jù)。借助MCQA2.0的低延時(shí)、資源隔離、彈性并發(fā)、數(shù)據(jù)緩存等特性,結(jié)合MaxCompute表分區(qū)、分桶等優(yōu)化設(shè)計(jì),可以低成本滿足多并發(fā)、快速響應(yīng)的報(bào)告生成、統(tǒng)計(jì)分析及固定報(bào)表分析需求。 | 查詢的數(shù)據(jù)對象通常為聚合后的結(jié)果數(shù)據(jù),適用于數(shù)據(jù)量較小、多維查詢、固定查詢、高頻查詢場景。查詢延時(shí)要求高,秒級(jí)返回(例如大部分查詢不超過5秒,不同查詢作業(yè)由于數(shù)據(jù)規(guī)模和查詢復(fù)雜度不同,查詢時(shí)間有較大差異)。 |
海量數(shù)據(jù)明細(xì)查詢分析 | MCQA2.0可以自動(dòng)識(shí)別查詢作業(yè)特征,既能快速響應(yīng),處理小規(guī)模作業(yè),同時(shí)還可以自動(dòng)匹配大規(guī)模作業(yè)資源需求,滿足分析人員分析不同規(guī)模和復(fù)雜度的查詢作業(yè)的需求。 | 需要探索的歷史數(shù)據(jù)量大、真正需要的有效數(shù)據(jù)量不大、查詢延時(shí)要求適中。使用者通常為業(yè)務(wù)分析人員,往往需要從明細(xì)數(shù)據(jù)中探尋業(yè)務(wù)規(guī)律,發(fā)現(xiàn)業(yè)務(wù)機(jī)會(huì),驗(yàn)證業(yè)務(wù)假設(shè)。 |
使用限制
不支持非DDL、DML、DQL類的語句(例如授權(quán)操作、Tunnel操作等)在交互式Quota組執(zhí)行。
交互式Quota組中支持運(yùn)行UDF,但會(huì)涉及UDF隔離環(huán)境的現(xiàn)場拉起,為了防止造成性能劇烈波動(dòng),對能同時(shí)運(yùn)行UDF的CU數(shù)做了限制,最多只有30%的CU能同時(shí)運(yùn)行UDF。
默認(rèn)最大查詢100萬行數(shù)據(jù),可通過在SQL語句中增加Limit關(guān)鍵字突破此限制。
如果因使用限制導(dǎo)致MCQA2.0作業(yè)失敗,需要您手動(dòng)重試或嘗試將作業(yè)提交到批處理配額組中。
不同CU規(guī)格對應(yīng)的系統(tǒng)參數(shù)說明
CU數(shù) | 最大并行作業(yè)數(shù) | 作業(yè)超時(shí)時(shí)間(min) | 單作業(yè)并發(fā)度上限 |
< 512CU | 200 | 30 | CU 數(shù) * 30 |
512CU-1024CU | 400 | 60 | CU 數(shù) * 30 |
1024CU-1536CU | 600 | 90 | CU 數(shù) * 30 |
1536CU-2048CU | 800 | 120 | CU 數(shù) * 30 |
2048CU-2560CU | 1000 | 150 | CU 數(shù) * 30 |
2560CU-3072CU | 1200 | 180 | CU 數(shù) * 30 |
3072CU-3584CU | 1400 | 210 | CU 數(shù) * 30 |
3584CU-4096CU | 1600 | 240 | CU 數(shù) * 30 |
4096CU-4608CU | 1800 | 270 | CU 數(shù) * 30 |
4608CU-5120CU | 2000 | 300 | CU 數(shù) * 30 |
5120CU-5632CU | 2200 | 330 | CU 數(shù) * 30 |
5632CU-6144CU | 2400 | 360 | CU 數(shù) * 30 |
操作步驟
MCQA2.0功能處于邀測階段,申請?jiān)囉谜埌l(fā)起工單。
目前僅支持在包年包月MaxCompute實(shí)例中使用查詢加速升級(jí)功能。
整體使用方法為:新建交互式配額組,并在提交作業(yè)時(shí)指定交互式配額組。該作業(yè)只會(huì)被調(diào)度到對應(yīng)配額組中執(zhí)行。
登錄MaxCompute控制臺(tái),在左上角選擇地域。
在左側(cè)導(dǎo)航欄,選擇工作區(qū) > 配額(Quota)管理。
在Quota管理頁面,單擊需要配置的一級(jí)Quota操作列的Quota配置。
配置基礎(chǔ)配置。
在Quota配置頁面的基礎(chǔ)配置頁簽,單擊編輯基礎(chǔ)配置。
單擊+新建二級(jí)Quota后,自定義填寫Quota名稱,并選擇類型為交互式。
配置最小CU量(minCU)和最大CU量(maxCU)。
說明最小CU量(minCU)需要等于最大CU量(maxCU),且需要為32的倍數(shù)。
如果不需要交互式資源,設(shè)置為
0
。交互式類型的Quota不支持彈性預(yù)留CU。
單擊確定,完成新增交互式配額組。
對應(yīng)交互式配額組的最后部分會(huì)出現(xiàn)狀態(tài)展示為啟動(dòng)中,等待5分鐘左右,當(dāng)狀態(tài)變?yōu)?b data-tag="uicontrol" id="cac7a558c2qxk" class="uicontrol">運(yùn)行中以后,即可正常使用。
(可選)配置伸縮配置。
(可選)配置時(shí)間計(jì)劃。
配置時(shí)間計(jì)劃設(shè)置每日不同時(shí)間點(diǎn)啟用不同的Quota計(jì)劃,以此實(shí)現(xiàn)對Quota配置的分時(shí)邏輯,配置詳情請參見計(jì)算資源-Quota管理。
若希望對交互式配額組進(jìn)行擴(kuò)、縮容,可以在基礎(chǔ)配置中調(diào)大或調(diào)小CU量。
若需刪除交互式配額組,可直接單擊刪除,后臺(tái)會(huì)自動(dòng)完成相關(guān)銷毀動(dòng)作。
提交作業(yè)
使用MCQA2.0功能進(jìn)行DataWorksIDE臨時(shí)查詢或數(shù)據(jù)開發(fā)
在DataWorks數(shù)據(jù)開發(fā)(新版)頁面新建MaxCompute SQL節(jié)點(diǎn)后,在右側(cè)的調(diào)試配置面板中可以選擇計(jì)算配額,選擇交互式配額組以后,數(shù)據(jù)開發(fā)(新版)頁面執(zhí)行的作業(yè)將會(huì)被調(diào)度到交互式配額組執(zhí)行。如果返回結(jié)果的InstanceId帶有_mcqa
的后綴,則代表成功運(yùn)行到了MCQA2.0模式。
使用MCQA2.0功能進(jìn)行MaxCompute控制臺(tái)TopConsolo-SQL分析
MaxCompute控制臺(tái)SQL分析頁面右側(cè)的運(yùn)行參數(shù)可以選擇計(jì)算配額,選擇交互式配額組以后,SQL分析頁面執(zhí)行的作業(yè)將會(huì)被調(diào)度到交互式配額組執(zhí)行。如果返回結(jié)果的InstanceId帶有_mcqa
的后綴,則代表成功運(yùn)行到了MCQA2.0模式。
通過JDBC使用MCQA2.0功能
您可以通過以下操作開啟MCQA2.0功能,并使用JDBC連接MaxCompute,詳情請參見使用說明。
通過Maven方式配置Pom依賴。
說明此處以
3.8.0-rc0
版本為例配置Pom依賴,您可根據(jù)實(shí)際自行選擇3.8.0-rc0
或以上版本,推薦使用最新版本。<dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-jdbc</artifactId> <version>3.8.0-rc0</version> </dependency>
基于源代碼創(chuàng)建Java程序,適配實(shí)際信息,詳情請參見MaxCompute JDBC,示例如下。
// 阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,風(fēng)險(xiǎn)很高。強(qiáng)烈建議您創(chuàng)建并使用RAM用戶進(jìn)行API訪問或日常運(yùn)維,請登錄RAM控制臺(tái)創(chuàng)建RAM用戶 // 此處以把AccessKey 和 AccessKeySecret 保存在環(huán)境變量為例說明。您也可以根據(jù)業(yè)務(wù)需要,保存到配置文件里 // 強(qiáng)烈建議不要把 AccessKey 和 AccessKeySecret 保存到代碼里,會(huì)存在密鑰泄漏風(fēng)險(xiǎn) private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); //your_project_name為需要使用MCQA功能的項(xiàng)目名稱。 //your_quota_nick_name為期望使用的交互式Quota組的名字 String conn = "jdbc:odps:http://service.<regionid>.maxcompute.aliyun.com/api?project=<YOUR_PROJECT_NAME>"&accessId&accessKey&charset=UTF-8&interactiveMode=true"aName=<your_quota_nick_name>&autoSelectLimit=1000000000"; Statement stmt = conn.createStatement(); Connection conn = DriverManager.getConnection(conn, accessId, accessKey); Statement stmt = conn.createStatement(); String tableName = "testOdpsDriverTable"; stmt.execute("DROP TABLE IF EXISTS " + tableName); stmt.execute("CREATE TABLE " + tableName + " (key int, value string)");
您也可以在連接串中配置如下參數(shù),完善處理邏輯。
參數(shù)
說明
enableOdpsLogger
用于打印日志。未配置SLF4J時(shí),建議您將此參數(shù)配置為True。
使用示例
以下為您展示在Tableau和SQLWorkbench中使用MCQA2.0時(shí)的服務(wù)器配置方法。
示例1:Tableau使用MCQA2.0
服務(wù)器增加
interactiveMode=true
和quotaName=your_quota_nick_name
屬性,用于開啟MCQA2.0功能。建議您同步增加enableOdpsLogger=true
屬性,用于打印日志。配置操作詳情請參見配置JDBC使用Tableau。完整的服務(wù)器配置示例如下。
// <your_quota_nick_name>為期望使用的交互式Quota組的名字 http://service.cn-beijing.maxcompute.aliyun.com/api? project=****_beijing&interactiveMode=true"aName=<your_quota_nick_name>&enableOdpsLogger=true&autoSelectLimit=1000000000"
如果只對項(xiàng)目空間中的部分表進(jìn)行Tableau操作,您可以在服務(wù)器參數(shù)中增加
table_list=table_name1, table_name2
屬性選擇需要的表,多表之間用半角逗號(hào)(,)分隔。如果表過多,會(huì)導(dǎo)致Tableau打開緩慢,強(qiáng)烈建議使用此方式只載入需要的表。示例如下,對于有大量分區(qū)的表不建議將所有分區(qū)的數(shù)據(jù)都設(shè)置成數(shù)據(jù)源,可以篩選需要的分區(qū)或通過自定義SQL獲取需要的數(shù)據(jù)。
//your_quota_nick_name為期望使用的交互式 Quota 組的名字 http://service.cn-beijing.maxcompute.aliyun.com/api?project=****_beijing &interactiveMode=true&alwaysFallback=true"aName=<YOUR_QUOTA_NICK_NAME>&enableOdpsLogger=true&autoSelectLimit=1000000000" &table_list=orders,customers
示例2:SQLWorkBench使用MCQA2.0
完成JDBC驅(qū)動(dòng)配置后,在Profile配置界面修改已填寫的JDBC URL,支持SQLWorkbench使用MCQA2.0功能。Profile配置操作詳情請參見配置JDBC使用SQL Workbench/J。
需要配置的URL格式如下所示:
//your_quota_nick_name為期望使用的交互式 Quota 組的名字 jdbc:odps:<MaxCompute_endpoint>? project=<MaxCompute_project_name>&accessId=<AccessKey ID>&accessKey=<AccessKey Secret> &charset=UTF-8&interactiveMode=true"aName=<YOUR_QUOTA_NICK_NAME>&autoSelectLimit=1000000000"
參數(shù)說明如下。
參數(shù)
說明
MaxCompute_endpoint
MaxCompute服務(wù)所在區(qū)域的Endpoint,詳情請參見Endpoint。
MaxCompute_project_name
MaxCompute項(xiàng)目空間名稱。
AccessKey ID
有訪問指定項(xiàng)目空間權(quán)限的AccessKey ID。
您可以進(jìn)入AccessKey管理頁面獲取AccessKey ID。
AccessKey Secret
AccessKey ID對應(yīng)的AccessKey Secret。
您可以進(jìn)入AccessKey管理頁面獲取AccessKey Secret。
your_quota_nick_name
期望使用的交互式Quota組的名稱。
charset=UTF-8
字符集編碼格式。
interactiveMode
MCQA2.0功能開關(guān),
true
表示開啟MCQA功能。quotaName
期望使用的交互式 Quota 組名字
autoSelectLimit
數(shù)據(jù)量超過100萬限制時(shí),需要配置此參數(shù)。
基于Java SDK啟用MCQA2.0功能
Java SDK詳情請參見Java SDK介紹。您需要通過Maven配置Pom依賴,配置示例如下。
此處以0.50.0-rc1
版本為例配置Pom依賴,您可根據(jù)實(shí)際自行選擇0.50.0-rc1
或以上版本,推薦使用最新版本。
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>0.50.0-rc1</version>
</dependency>
創(chuàng)建Java程序,命令示例如下。
import ...;
public class SQLExecutorExample {
public static void main(String args[]) {
// 設(shè)置賬號(hào)和項(xiàng)目信息。
// 阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,風(fēng)險(xiǎn)很高。強(qiáng)烈建議您創(chuàng)建并使用RAM用戶進(jìn)行API訪問或日常運(yùn)維,請登錄RAM控制臺(tái)創(chuàng)建RAM用戶
// 此處以把AccessKey 和 AccessKeySecret 保存在環(huán)境變量為例說明。您也可以根據(jù)業(yè)務(wù)需要,保存到配置文件里
// 強(qiáng)烈建議不要把 AccessKey 和 AccessKeySecret 保存到代碼里,會(huì)存在密鑰泄漏風(fēng)險(xiǎn)
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("<YOUR_PROJECT_NAME>");
odps.setEndpoint("http://service.<regionid>.maxcompute.aliyun.com/api");
// 準(zhǔn)備構(gòu)建SQLExecutor。
SQLExecutorBuilder builder = SQLExecutorBuilder.builder();
SQLExecutor sqlExecutor = null;
try {
// 創(chuàng)建一個(gè)默認(rèn)使用 MCQA2.0 模式的Executor。
sqlExecutor = builder.odps(odps)
.executeMode(ExecuteMode.INTERACTIVE)
.quotaName("<YOUR_INTERACTIVE_QUOTA_NICKNAME>")
.enableMcqaV2(true)
.build();
// 如果需要的話可以傳入查詢的特殊設(shè)置。
Map<String, String> queryHint = new HashMap<>();
queryHint.put("odps.sql.mapper.split.size", "128");
// 提交一個(gè)查詢作業(yè),支持傳入Hint。
sqlExecutor.run("select count(1) from test_table;", queryHint);
// 當(dāng)前查詢作業(yè)的logview。
System.out.println("Logview:" + sqlExecutor.getLogView());
// 當(dāng)前查詢作業(yè)的InstanceId
System.out.println("InstanceId:" + sqlExecutor.getQueryId());
ResultSet resultSet = sqlExecutor.getResultSet();
while (resultSet.hasNext()) {
System.out.println(resultSet.next());
}
// run another query
sqlExecutor.run("select * from test_table;", new HashMap<>());
// 獲取查詢結(jié)果的迭代器ResultSet,同步接口,可能會(huì)占用本線程直到查詢成功或失敗。
// 獲取大量結(jié)果數(shù)據(jù)時(shí)推薦使用,分次讀取查詢結(jié)果。
ResultSet resultSet = sqlExecutor.getResultSet();
while (resultSet.hasNext()) {
System.out.println(resultSet.next());
}
} catch (OdpsException | IOException e) {
e.printStackTrace();
} finally {
if (sqlExecutor != null) {
// 關(guān)閉Executor釋放相關(guān)資源。
sqlExecutor.close();
}
}
}
}