StarRocks Connector通過實現External Catalog機制,無需資料匯入或建立外部表格即可無縫訪問MaxCompute資料來源,並執行複雜的SQL查詢,提升了資料分析效率並降低了營運難度和成本。本文為您介紹如何通過StarRocks Connector訪問MaxCompute。
背景資訊
StarRocks是新一代極速全情境MPP (Massively Parallel Processing) 資料庫,可以滿足企業級使用者的多種分析需求,包括OLAP (Online Analytical Processing) 多維分析、定製報表、即時資料分析和Ad-hoc資料分析等。關於StarRocks詳情,請參見StarRocks簡介。StarRocks支援Catalog(資料目錄)功能,實現在一套系統內同時維護內、外部資料,方便您輕鬆訪問並查詢儲存在各類外部源的資料,詳情請參見Catalog Overview。
前提條件
已部署V3.2.3及以上版本StarRocks叢集,且確保StarRocks叢集能夠正常訪問MaxCompute服務。關於如何部署StarRocks叢集操作,詳情請參見使用Docker Compose部署StarRocks存算一體叢集。
使用限制
支援讀取普通表、分區表、聚簇表、Delta Table和物化視圖,不支援讀取外部表格、邏輯視圖。
不支援讀JSON資料類型。
僅支援未開啟Schema的MaxCompute專案。關於Schema詳情,請參見Schema操作。
建立MaxCompute Catalog
登入StarRocks並在StarRocks中建立MaxCompute Catalog。關於External Catalog詳情,請參見Create External Catalog。
文法
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "odps",
CatalogParams,
ScanParams,
CachingMetaParams
)參數說明
公用參數
參數
是否必填
說明
catalog_name
是
MaxCompute Catalog的名稱。命名規則如下:
必須由字母 (a~z 或 A~Z)、數字 (0~9) 或底線 (_) 組成,且只能以字母開頭。
總長度不能超過1023個字元。
Catalog名稱大小寫敏感。
type
是
資料來源的類型,需設定為
odps。comment
否
MaxCompute Catalog的描述。
CatalogParams
是
StarRocks訪問MaxCompute的相關參數。
ScanParams
否
StarRocks訪問MaxCompute檔案儲存體的相關參數。
CachingMetaParams
否
指定緩衝中繼資料快取策略的相關參數。
CatalogParams相關參數
參數
是否必填
說明
odps.endpoint
是
MaxCompute服務的串連地址。您需要根據建立MaxCompute專案時選擇的地區以及網路連接方式配置Endpoint。各地區及網路對應的Endpoint值,請參見Endpoint。
重要當前僅支援使用阿里雲VPC網路。
odps.project
是
MaxCompute專案名稱。您可以登入MaxCompute控制台,在頁面擷取MaxCompute專案名稱。
說明如果您建立了標準模式的工作空間,在配置此參數時,請注意區分生產環境與開發環境(_dev)的專案名稱。
odps.access.id
是
阿里雲帳號或RAM使用者的AccessKey ID。您可以進入AccessKey管理頁面擷取AccessKey ID。
odps.access.key
是
AccessKey ID對應的AccessKey Secret。
odps.tunnel.quota
是
訪問MaxCompute使用的Quota名稱。訪問MaxCompute支援獨享Data Transmission Service資源群組(訂用帳戶)和開放儲存(隨用隨付)兩種資源,擷取Quota名稱的方式分別如下:
獨享Data Transmission Service資源群組:登入MaxCompute控制台,左上方切換地區後,在左側導覽列選擇工作區>配額(Quota)管理,查看可使用的Quota列表。具體操作,請參見計算資源-Quota管理。
開放儲存:登入MaxCompute控制台,在左側導覽列選擇租戶管理>租戶屬性,開啟開放儲存並進行授權操作。
ScanParams相關參數
參數
是否必填
說明
odps.split.policy
否
掃描資料時所使用的分區策略。取值說明如下:
size(預設值):按資料大小進行分區,預設值:256MB。
row_offset:按行數進行分區。
說明分區策略對計算引擎的資料掃描並發度有重要影響,如果預設策略不滿足需求,可選擇
row_offset策略結合odps.split.row.count參數自行調整。odps.split.row.count
否
每個分區的最大行數,預設值:4194304,取值範圍:大於0。
說明僅當
odps.split.policy參數為row_offset時需配置此參數。CachingMetaParams相關參數
參數
是否必填
說明
odps.cache.table.enable
否
是否緩衝表的中繼資料。取值說明如下:
true(預設值):開啟緩衝表的中繼資料,有助於提升中繼資料的檢索和更新速度,適用於頻繁進行DDL操作、大型多使用者環境以及需要進行複雜查詢最佳化的情境。
false:關閉緩衝表的中繼資料,由於緩衝資源有限,且過度依賴緩衝可能導致記憶體資源過度消耗,對於非高頻查詢或表中繼資料經常變化的情境可關閉緩衝。
odps.cache.table.expire
否
自動淘汰緩衝的表中繼資料的時間間隔,單位:秒(s)。預設值:86400,即24小時,取值範圍:大於等於0。
odps.cache.table.size
否
緩衝表中繼資料的數量。預設值:1000。
odps.cache.partition.enable
否
是否緩衝目標表下所有分區的中繼資料。取值說明如下:
true(預設值):開啟緩衝目標表下所有分區的中繼資料。
false:關閉緩衝,所有分區的中繼資料均不緩衝。
說明若非分區表配置
odps.cache.partition.enable參數將不生效。odps.cache.partition.expire
否
自動淘汰緩衝所有分區中繼資料的時間間隔,單位:秒(s)。預設值:86400,即24小時,取值範圍:大於等於0。
odps.cache.partition.size
否
可快取的分區表的數量。預設值:1000。
odps.cache.table-name.enable
否
是否緩衝MaxCompute專案下所有表名稱。取值說明如下:
true:開啟緩衝MaxCompute專案下所有表名稱。
false(預設值):關閉緩衝,不進行MaxCompute專案下所有表名稱的緩衝。
odps.cache.table-name.expire
否
自動淘汰緩衝MaxCompute專案中表資訊資料的時間間隔,單位:秒(s)。預設值:86400,即24小時,取值範圍:大於等於0。
樣本
以下樣本示範建立一個名為odps_catalog的MaxCompute Catalog,其中以MaxCompute專案mf_mc_bj為例。
-- 建立catalog
CREATE EXTERNAL CATALOG odps_catalog PROPERTIES(
"type"="odps",
"odps.access.id"="<yourAccessKeyId>",
"odps.access.key"="<yourAccessKeySecret>",
"odps.endpoint"="http://service.cn-beijing.maxcompute.aliyun.com/api",
"odps.tunnel.quota"="pay-as-you-go",
"odps.project"="mf_mc_bj"
);訪問MaxCompute
切換到目標Catalog和MaxCompute專案。本文以
odps_catalog和mf_mc_bj為例。文法
方式一
--指定Catalog SET CATALOG <catalog_name>; --指定MaxCompute專案 USE <project_name>;方式二
USE <catalog_name>.<project_name>;
樣本
SET CATALOG odps_catalog; USE mf_mc_bj;
查詢資料。本文以
src表為例。
SELECT * FROM src LIMIT 10;返回結果如下。
+------+-------+
| key | value |
+------+-------+
| 1 | 1 |
| 3 | 3 |
| 2 | 2 |
| 4 | 100 |
| 5 | 200 |
| 6 | 300 |
| 3 | 400 |
+------+-------+其他動作
查看MaxCompute Catalog
查詢當前所在StarRocks叢集中所有Catalog。
SHOW CATALOGS;返回結果如下。
+-----------------+----------+------------------------------------------------------------------+ | Catalog | Type | Comment | +-----------------+----------+------------------------------------------------------------------+ | default_catalog | Internal | An internal catalog contains this cluster‘s self-managed tables. | | odps_catalog | Odps | NULL | +-----------------+----------+------------------------------------------------------------------+查詢指定Catalog對應的建立語句。
SHOW CREATE CATALOG odps_catalog;返回結果如下。
+--------------+--------------------------------------------------------------------------+ | Catalog | Create Catalog | +--------------+--------------------------------------------------------------------------+ | odps_catalog | CREATE EXTERNAL CATALOG `odps_catalog` PROPERTIES ("odps.endpoint" = "http://service.cn-beijing.maxcompute.aliyun.com/api", "odps.access.id" = "<yourAccessKeyId>", "odps.access.key" = "<yourAccessKeySecret>", "odps.project" = "odps_project", "type" = "odps" )| +-----------------------------------------------------------------------------------------+
查看MaxCompute表結構
查詢MaxCompute表結構。
文法
DESC[RIBE] <catalog_name>.<database_name>.<table_name>;參數說明
catalog_name:必填,Catalog名稱。
database_name:必填,目標Catalog下的MaxCompute專案名稱。
table_name:必填,目標MaxCompute專案下的表名稱。
樣本
DESC odps_catalog.mf_mc_bj.src;返回結果如下。
+-------+------+------+-------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------+------+-------+---------+-------+ | id | INT | Yes | false | NULL | | | a | INT | Yes | false | NULL | | +-------+------+------+-------+---------+-------+
查詢MaxCompute表結構和對應的建表語句。
文法
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;參數說明
catalog_name:必填,Catalog名稱。
database_name:必填,目標Catalog下的MaxCompute專案名稱。
table_name:必填,目標MaxCompute專案下的表名稱。
樣本
SHOW CREATE TABLE odps_catalog.mf_mc_bj.src;返回結果如下。
+-------+--------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------+ | src | CREATE TABLE `src` ( `id` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL ) | +-------+--------------------------------------------------------------------------------+
刪除 MaxCompute Catalog
您可通過如下命令,刪除MaxCompute Catalog。
DROP CATALOG odps_catalog;CBO(Cost-Based Optimizer)統計資訊採集
StarRocks目前的版本暫不支援自動採集MaxCompute表的統計資訊,您可以通過以下命令,手動建立採集任務,進行統計資訊採集。
--<table_name>替換為MaxCompute表名稱
ANALYZE TABLE <table_name>;StarRocks CBO可以基於多種統計資訊進行代價估算,能夠在數萬層級的執行計畫中,選擇代價最低的執行計畫,提升複雜查詢的效率和效能,詳情請參見Gather statistics for CBO。
手動更新中繼資料快取
預設情況下,StarRocks會緩衝MaxCompute的中繼資料,從而提高查詢效能。當對錶做了表結構變更或表資料更新後,您也可以手動更新該表的中繼資料,從而確保StarRocks第一時間擷取到新的中繼資料快取。
--<table_name>替換為MaxCompute表名稱
REFRESH EXTERNAL TABLE <table_name>;常見問題
讀取報錯:Your slot quota is exceeded.
問題分析
當讀取資料超過Data Transmission Service限額時,會觸發該報錯。在讀取資料時,StarRocks會將表切分成若干分區,分發給BE,由BE通過線程池並發讀取。因此,在讀取過程中佔用的Slot數量通常為:
Max(分區數量,BE數量*BE線程池並發數)。解決方案
購買高並發數的獨享Data Transmission Service資源。具體操作,請參見購買與使用獨享Data Transmission Service資源群組。
通過配置
ScanParams參數,調整分區數量。如採用row_offset分區策略,還需提高odps.split.row.count參數。修改Starrocks BE線程池數量
scanner_thread_pool_queue_size、scanner_thread_pool_thread_num。修改方式詳情,請參見StarRocks簡介。
附錄:類型映射
MaxCompute欄位類型 | StarRocks欄位類型 |
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類型,當讀取TIMESTAMP類型資料時,會被作為DATETIME類型處理,導致資料精度丟失。 |
ARRAY | ARRAY |
MAP | MAP |
STRUCT | STRUCT |