StarRocks Connector
StarRocks Connector通過(guò)實(shí)現(xiàn)External Catalog機(jī)制,無(wú)需數(shù)據(jù)導(dǎo)入或創(chuàng)建外部表即可無(wú)縫訪(fǎng)問(wèn)MaxCompute數(shù)據(jù)源,并執(zhí)行復(fù)雜的SQL查詢(xún),提升了數(shù)據(jù)分析效率并降低了運(yùn)維難度和成本。本文為您介紹如何通過(guò)StarRocks Connector訪(fǎng)問(wèn)MaxCompute。
背景信息
StarRocks是新一代極速全場(chǎng)景MPP (Massively Parallel Processing) 數(shù)據(jù)庫(kù),可以滿(mǎn)足企業(yè)級(jí)用戶(hù)的多種分析需求,包括OLAP (Online Analytical Processing) 多維分析、定制報(bào)表、實(shí)時(shí)數(shù)據(jù)分析和Ad-hoc數(shù)據(jù)分析等。關(guān)于StarRocks詳情,請(qǐng)參見(jiàn)StarRocks簡(jiǎn)介。StarRocks支持Catalog(數(shù)據(jù)目錄)功能,實(shí)現(xiàn)在一套系統(tǒng)內(nèi)同時(shí)維護(hù)內(nèi)、外部數(shù)據(jù),方便您輕松訪(fǎng)問(wèn)并查詢(xún)存儲(chǔ)在各類(lèi)外部源的數(shù)據(jù),詳情請(qǐng)參見(jiàn)Catalog概述。
前提條件
已部署V3.2.3及以上版本StarRocks集群,且確保StarRocks集群能夠正常訪(fǎng)問(wèn)MaxCompute服務(wù)。關(guān)于如何部署StarRocks集群操作,詳情請(qǐng)參見(jiàn)使用Docker Compose部署StarRocks存算一體集群。
使用限制
支持讀取分區(qū)表、聚簇表、物化視圖,不支持讀取MaxCompute的Delta Table、外部表、邏輯視圖。
不支持讀JSON數(shù)據(jù)類(lèi)型。
僅支持未開(kāi)啟Schema的MaxCompute項(xiàng)目。關(guān)于Schema詳情,請(qǐng)參見(jiàn)Schema操作。
創(chuàng)建MaxCompute Catalog
登錄StarRocks并在StarRocks中創(chuàng)建MaxCompute Catalog。關(guān)于External Catalog詳情,請(qǐng)參見(jiàn)Create External Catalog。
語(yǔ)法
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "odps",
CatalogParams,
ScanParams,
CachingMetaParams
)
參數(shù)說(shuō)明
公共參數(shù)
參數(shù)
是否必填
說(shuō)明
catalog_name
是
MaxCompute Catalog的名稱(chēng)。命名規(guī)則如下:
必須由字母 (a~z 或 A~Z)、數(shù)字 (0~9) 或下劃線(xiàn) (_) 組成,且只能以字母開(kāi)頭。
總長(zhǎng)度不能超過(guò)1023個(gè)字符。
Catalog名稱(chēng)大小寫(xiě)敏感。
type
是
數(shù)據(jù)源的類(lèi)型,需設(shè)置為
odps
。comment
否
MaxCompute Catalog的描述。
CatalogParams
是
StarRocks訪(fǎng)問(wèn)MaxCompute的相關(guān)參數(shù)。
ScanParams
否
StarRocks訪(fǎng)問(wèn)MaxCompute文件存儲(chǔ)的相關(guān)參數(shù)。
CachingMetaParams
否
指定緩存元數(shù)據(jù)緩存策略的相關(guān)參數(shù)。
CatalogParams相關(guān)參數(shù)
參數(shù)
是否必填
說(shuō)明
odps.endpoint
是
MaxCompute服務(wù)的連接地址。您需要根據(jù)創(chuàng)建MaxCompute項(xiàng)目時(shí)選擇的地域以及網(wǎng)絡(luò)連接方式配置Endpoint。各地域及網(wǎng)絡(luò)對(duì)應(yīng)的Endpoint值,請(qǐng)參見(jiàn)Endpoint。
說(shuō)明當(dāng)前僅支持使用阿里云VPC網(wǎng)絡(luò)。
odps.project
是
MaxCompute項(xiàng)目名稱(chēng)。您可以登錄MaxCompute控制臺(tái),在 頁(yè)面獲取MaxCompute項(xiàng)目名稱(chēng)。
說(shuō)明如果您創(chuàng)建了標(biāo)準(zhǔn)模式的工作空間,在配置此參數(shù)時(shí),請(qǐng)注意區(qū)分生產(chǎn)環(huán)境與開(kāi)發(fā)環(huán)境(_dev)的項(xiàng)目名稱(chēng)。
odps.access.id
是
阿里云賬號(hào)或RAM用戶(hù)的AccessKey ID。您可以進(jìn)入AccessKey管理頁(yè)面獲取AccessKey ID。
odps.access.key
是
AccessKey ID對(duì)應(yīng)的AccessKey Secret。
odps.tunnel.quota
是
訪(fǎng)問(wèn)MaxCompute使用的Quota名稱(chēng)。訪(fǎng)問(wèn)MaxCompute支持獨(dú)享數(shù)據(jù)傳輸服務(wù)資源組(包年包月)和開(kāi)放存儲(chǔ)(按量計(jì)費(fèi))兩種資源,獲取Quota名稱(chēng)的方式分別如下:
獨(dú)享數(shù)據(jù)傳輸服務(wù)資源組:登錄MaxCompute控制臺(tái),左上角切換地域后,在左側(cè)導(dǎo)航欄選擇工作區(qū)>配額(Quota)管理,查看可使用的Quota列表。具體操作,請(qǐng)參見(jiàn)計(jì)算資源-Quota管理。
開(kāi)放存儲(chǔ):登錄MaxCompute控制臺(tái),在左側(cè)導(dǎo)航欄選擇租戶(hù)管理>租戶(hù)屬性,開(kāi)啟開(kāi)放存儲(chǔ)并進(jìn)行授權(quán)操作。具體操作,請(qǐng)參見(jiàn)使用開(kāi)放存儲(chǔ)(按量付費(fèi))。
開(kāi)放存儲(chǔ)資源名稱(chēng)默認(rèn)為
pay-as-you-go
。
ScanParams相關(guān)參數(shù)
參數(shù)
是否必填
說(shuō)明
odps.split.policy
否
掃描數(shù)據(jù)時(shí)所使用的分片策略。取值說(shuō)明如下:
size(默認(rèn)值):按數(shù)據(jù)大小進(jìn)行分片,默認(rèn)值:256MB。
row_offset:按行數(shù)進(jìn)行分片。
說(shuō)明分片策略對(duì)計(jì)算引擎的數(shù)據(jù)掃描并發(fā)度有重要影響,如果默認(rèn)策略不滿(mǎn)足需求,可選擇
row_offset
策略結(jié)合odps.split.row.count
參數(shù)自行調(diào)整。odps.split.row.count
否
每個(gè)分片的最大行數(shù),默認(rèn)值:4194304,取值范圍:大于0。
說(shuō)明僅當(dāng)
odps.split.policy
參數(shù)為row_offset
時(shí)需配置此參數(shù)。CachingMetaParams相關(guān)參數(shù)
參數(shù)
是否必填
說(shuō)明
odps.cache.table.enable
否
是否緩存表的元數(shù)據(jù)。取值說(shuō)明如下:
true(默認(rèn)值):開(kāi)啟緩存表的元數(shù)據(jù),有助于提升元數(shù)據(jù)的檢索和更新速度,適用于頻繁進(jìn)行DDL操作、大型多用戶(hù)環(huán)境以及需要進(jìn)行復(fù)雜查詢(xún)優(yōu)化的場(chǎng)景。
false:關(guān)閉緩存表的元數(shù)據(jù),由于緩存資源有限,且過(guò)度依賴(lài)緩存可能導(dǎo)致內(nèi)存資源過(guò)度消耗,對(duì)于非高頻查詢(xún)或表元數(shù)據(jù)經(jīng)常變化的場(chǎng)景可關(guān)閉緩存。
odps.cache.table.expire
否
自動(dòng)淘汰緩存的表元數(shù)據(jù)的時(shí)間間隔,單位:秒(s)。默認(rèn)值:86400,即24小時(shí),取值范圍:大于等于0。
odps.cache.table.size
否
緩存表元數(shù)據(jù)的數(shù)量。默認(rèn)值:1000。
odps.cache.partition.enable
否
是否緩存目標(biāo)表下所有分區(qū)的元數(shù)據(jù)。取值說(shuō)明如下:
true(默認(rèn)值):開(kāi)啟緩存目標(biāo)表下所有分區(qū)的元數(shù)據(jù)。
false:關(guān)閉緩存,所有分區(qū)的元數(shù)據(jù)均不緩存。
說(shuō)明若非分區(qū)表配置
odps.cache.partition.enable
參數(shù)將不生效。odps.cache.partition.expire
否
自動(dòng)淘汰緩存所有分區(qū)元數(shù)據(jù)的時(shí)間間隔,單位:秒(s)。默認(rèn)值:86400,即24小時(shí),取值范圍:大于等于0。
odps.cache.partition.size
否
可緩存的分區(qū)表的數(shù)量。默認(rèn)值:1000。
odps.cache.table-name.enable
否
是否緩存MaxCompute項(xiàng)目下所有表名稱(chēng)。取值說(shuō)明如下:
true:開(kāi)啟緩存MaxCompute項(xiàng)目下所有表名稱(chēng)。
false(默認(rèn)值):關(guān)閉緩存,不進(jìn)行MaxCompute項(xiàng)目下所有表名稱(chēng)的緩存。
odps.cache.table-name.expire
否
自動(dòng)淘汰緩存MaxCompute項(xiàng)目中表信息數(shù)據(jù)的時(shí)間間隔,單位:秒(s)。默認(rèn)值:86400,即24小時(shí),取值范圍:大于等于0。
示例
以下示例演示創(chuàng)建一個(gè)名為odps_catalog
的MaxCompute Catalog,其中以MaxCompute項(xiàng)目mf_mc_bj
為例。
-- 創(chuàng)建catalog
CREATE EXTERNAL CATALOG odps_catalog PROPERTIES(
"type"="odps",
"odps.access.id"="LTAI5tRzd4W8cTyLZKT****",
"odps.access.key"="gJwKaF3hK9MDAQgbO0zsHCz****",
"odps.endpoint"="http://service.cn-beijing.maxcompute.aliyun.com/api",
"odps.tunnel.quota"="pay-as-you-go",
"odps.project"="mf_mc_bj"
);
訪(fǎng)問(wèn)MaxCompute
切換到目標(biāo)Catalog和MaxCompute項(xiàng)目。本文以
odps_catalog
和mf_mc_bj
為例。語(yǔ)法
方式一
--指定Catalog SET CATALOG <catalog_name>; --指定MaxCompute項(xiàng)目 USE <project_name>;
方式二
USE <catalog_name>.<project_name>;
示例
SET CATALOG odps_catalog; USE mf_mc_bj;
查詢(xún)數(shù)據(jù)。本文以
src
表為例。
SELECT COUNT(*) FROM src LIMIT 10;
返回結(jié)果如下。
+------+-------+
| key | value |
+------+-------+
| 1 | 1 |
| 3 | 3 |
| 2 | 2 |
| 4 | 100 |
| 5 | 200 |
| 6 | 300 |
| 3 | 400 |
+------+-------+
其他操作
查看MaxCompute Catalog
查詢(xún)當(dāng)前所在StarRocks集群中所有Catalog。
SHOW CATALOGS;
返回結(jié)果如下。
+-----------------+----------+------------------------------------------------------------------+ | Catalog | Type | Comment | +-----------------+----------+------------------------------------------------------------------+ | default_catalog | Internal | An internal catalog contains this cluster‘s self-managed tables. | | odps_catalog | Odps | NULL | +-----------------+----------+------------------------------------------------------------------+
查詢(xún)指定Catalog對(duì)應(yīng)的創(chuàng)建語(yǔ)句。
SHOW CREATE CATALOG odps_catalog;
返回結(jié)果如下。
+--------------+--------------------------------------------------------------------------+ | Catalog | Create Catalog | +--------------+--------------------------------------------------------------------------+ | odps_catalog | CREATE EXTERNAL CATALOG `odps_catalog` PROPERTIES ("odps.endpoint" = "http://service.cn-beijing.maxcompute.aliyun.com/api", "odps.access.id" = "LT******Kb", "odps.access.key" = "gJ******CB", "odps.project" = "odps_project", "type" = "odps" )| +-----------------------------------------------------------------------------------------+
查看MaxCompute表結(jié)構(gòu)
查詢(xún)MaxCompute表結(jié)構(gòu)。
語(yǔ)法
DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
參數(shù)說(shuō)明
catalog_name:必填,Catalog名稱(chēng)。
database_name:必填,目標(biāo)Catalog下的MaxCompute項(xiàng)目名稱(chēng)。
table_name:必填,目標(biāo)MaxCompute項(xiàng)目下的表名稱(chēng)。
示例
DESC odps_catalog.mf_mc_bj.src;
返回結(jié)果如下。
+-------+------+------+-------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------+------+-------+---------+-------+ | id | INT | Yes | false | NULL | | | a | INT | Yes | false | NULL | | +-------+------+------+-------+---------+-------+
查詢(xún)MaxCompute表結(jié)構(gòu)和對(duì)應(yīng)的建表語(yǔ)句。
語(yǔ)法
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;
參數(shù)說(shuō)明
catalog_name:必填,Catalog名稱(chēng)。
database_name:必填,目標(biāo)Catalog下的MaxCompute項(xiàng)目名稱(chēng)。
table_name:必填,目標(biāo)MaxCompute項(xiàng)目下的表名稱(chēng)。
示例
SHOW CREATE TABLE odps_catalog.mf_mc_bj.src;
返回結(jié)果如下。
+-------+--------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------+ | src | CREATE TABLE `src` ( `id` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL ) | +-------+--------------------------------------------------------------------------------+
刪除 MaxCompute Catalog
您可通過(guò)如下命令,刪除MaxCompute Catalog。
DROP CATALOG odps_catalog;
CBO(Cost-Based Optimizer)統(tǒng)計(jì)信息采集
StarRocks當(dāng)前版本暫不支持自動(dòng)采集MaxCompute表的統(tǒng)計(jì)信息,您可以通過(guò)以下命令,手動(dòng)創(chuàng)建采集任務(wù),進(jìn)行統(tǒng)計(jì)信息采集。
--<table_name>替換為MaxCompute表名稱(chēng)
ANALYZE TABLE <table_name>;
StarRocks CBO可以基于多種統(tǒng)計(jì)信息進(jìn)行代價(jià)估算,能夠在數(shù)萬(wàn)級(jí)別的執(zhí)行計(jì)劃中,選擇代價(jià)最低的執(zhí)行計(jì)劃,提升復(fù)雜查詢(xún)的效率和性能,詳情請(qǐng)參見(jiàn)CBO統(tǒng)計(jì)信息。
手動(dòng)更新元數(shù)據(jù)緩存
默認(rèn)情況下,StarRocks會(huì)緩存MaxCompute的元數(shù)據(jù),從而提高查詢(xún)性能。當(dāng)對(duì)表做了表結(jié)構(gòu)變更或表數(shù)據(jù)更新后,您也可以手動(dòng)更新該表的元數(shù)據(jù),從而確保StarRocks第一時(shí)間獲取到新的元數(shù)據(jù)緩存。
--<table_name>替換為MaxCompute表名稱(chēng)
REFRESH EXTERNAL TABLE <table_name>;
常見(jiàn)問(wèn)題
讀取報(bào)錯(cuò):Your slot quota is exceeded.
問(wèn)題分析
當(dāng)讀取數(shù)據(jù)超過(guò)數(shù)據(jù)傳輸服務(wù)限額時(shí),會(huì)觸發(fā)該報(bào)錯(cuò)。在讀取數(shù)據(jù)時(shí),StarRocks會(huì)將表切分成若干分片,分發(fā)給BE,由BE通過(guò)線(xiàn)程池并發(fā)讀取。因此,在讀取過(guò)程中占用的Slot數(shù)量通常為:
Max(分片數(shù)量,BE數(shù)量*BE線(xiàn)程池并發(fā)數(shù))
。解決方案
購(gòu)買(mǎi)高并發(fā)數(shù)的獨(dú)享數(shù)據(jù)傳輸服務(wù)資源。具體操作,請(qǐng)參見(jiàn)購(gòu)買(mǎi)與使用獨(dú)享數(shù)據(jù)傳輸服務(wù)資源組。
通過(guò)配置
ScanParams
參數(shù),調(diào)整分片數(shù)量。如采用row_offset
分片策略,還需提高odps.split.row.count
參數(shù)。修改Starrocks BE線(xiàn)程池?cái)?shù)量
scanner_thread_pool_queue_size
、scanner_thread_pool_thread_num
。修改方式詳情,請(qǐng)參見(jiàn)StarRocks簡(jiǎn)介。
附錄:類(lèi)型映射
MaxCompute字段類(lèi)型 | StarRocks字段類(lèi)型 |
BOOLEAN | BOOLEAN |
TINYINT | TINYINT |
SMALLINT | SMALLINT |
INT | INT |
BIGINT | BIGINT |
FLOAT | FLOAT |
DOUBLE | DOUBLE |
DECIMAL(p, s) | DECIMAL(p, s) |
STRING | VARCHAR(1073741824) |
VARCHAR(n) | VARCHAR(n) |
CHAR(n) | CHAR(n) |
JSON | VARCHAR(1073741824) |
BINARY | VARBINARY |
DATE | DATE |
DATETIME | DATETIME |
TIMESTAMP | DATETIME 重要 在StarRocks中,由于不存在TIMESTAMP類(lèi)型,當(dāng)讀取TIMESTAMP類(lèi)型數(shù)據(jù)時(shí),會(huì)被作為DATETIME類(lèi)型處理,導(dǎo)致數(shù)據(jù)精度丟失。 |
ARRAY | ARRAY |
MAP | MAP |
STRUCT | STRUCT |