全部產品
Search
文件中心

MaxCompute:StarRocks Connector

更新時間:Aug 02, 2025

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

前提條件

使用限制

  • 支援讀取普通表、分區表、聚簇表、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

  1. 切換到目標Catalog和MaxCompute專案。本文以odps_catalogmf_mc_bj為例。

    • 文法

      • 方式一

        --指定Catalog
        SET CATALOG <catalog_name>;
        --指定MaxCompute專案
        USE <project_name>;
      • 方式二

        USE <catalog_name>.<project_name>;
    • 樣本

      SET CATALOG odps_catalog;
      USE mf_mc_bj;
  2. 查詢資料。本文以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_sizescanner_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