為了更好地融入巨量資料生態,並支援外部引擎訪問MaxCompute中的資料,MaxCompute提供了開放儲存(Storage API)。第三方主Realtime Compute引擎可通過調用Storage API直接存取MaxCompute的底層儲存,從而顯著提升資料訪問和互動效率。
開放儲存介紹
開放儲存(Storage API)是一種資料服務介面,提供了高效、低延遲、安全的資料訪問方式,支援第三方主Realtime Compute訪問MaxCompute的儲存系統,提升了MaxCompute與開源計算引擎和機器學習引擎的整合度和資料處理效率。其中,Spark、StarRocks、Presto和Flink還直接通過Connector訪問儲存在MaxCompute中的資料,更加簡化了資料使用過程,提高了資料訪問效能。架構圖如下:

應用情境
開放儲存(Storage API)可應用於資料開放與多引擎計算情境,當企業或開發人員需要在不同的計算架構間靈活切換,或者利用特定引擎的特性處理MaxCompute中的資料時,Storage API可以作為橋樑促進資料流通和處理的多樣化。
關鍵特性
高吞吐:具備列級高效讀取的能力,支援在資料轉送前通過謂詞下推來過濾資料,同時支援Arrow格式。
安全易用:提供Table語義直讀底層儲存,屏蔽儲存細節,同時滿足專案隔離、許可權控制、資料加密等安全性原則。
生態融合:Spark on EMR和StarRocks可直接通過Connector訪問MaxCompute的資料,簡化了計算引擎的整合過程。
適用範圍
第三方引擎訪問MaxCompute時,支援讀取普通表、分區表、聚簇表、Delta Table和物化視圖;不支援讀取MaxCompute的外部表格、邏輯視圖。
不支援讀JSON資料類型。
開放儲存(隨用隨付)每個租戶的請求並發數限制為不超過1000個,每個並發傳輸速率限制為不超過10 MB/s。
資料轉送資源
第三方引擎通過MaxCompute開放儲存進行資料轉送任務時,可選擇使用Data Transmission Service獨享資源群組(訂用帳戶)資源。詳細介紹如下。
資源群組名稱 | 費用說明 | 支援地區 | 使用說明 |
訂用帳戶,按購買並發數的數量計費。 |
|
在资源观测頁面,可查看Data Transmission Service獨享資源群組(訂用帳戶)的使用詳情,請參見資源觀測。
使用樣本
通過Connector訪問MaxCompute,詳情請參見:
通過SDK訪問MaxCompute,詳情請參見:
Arrow資料類型映射
MaxCompute 開放儲存(Storage API)基於Apache Arrow資料類型,確保資料在儲存和傳輸過程中保持高效的結構化表示。在使用MaxCompute Storage API寫入資料時,不會對資料進行計算或加工處理(如Map資料去重),當儲存引擎無特殊限制時,將保留未經處理資料結構。
MaxCompute與Apache Arrow資料類型映射表,如下所示:
MaxCompute資料類型 | Arrow資料類型 |
TINYINT | Int8Type |
SMALLINT | Int16Type |
INT | Int32Type |
BIGINT | Int64Type |
FLOAT | FloatType |
DOUBLE | DoubleType |
BOOLEAN | BooleanType |
DECIMAL | Decimal128Type 說明 MaxCompute DECIMAL類型比Storage API Decimal128Type精度更高:
|
DECIMAL(precision, scale) | Decimal128Type |
STRING | StringType |
BINARY | BinaryType |
VARCHAR | StringType |
CHAR | StringType |
DATETIME | TimestampType[1] TimeUnit為毫秒,timezone為UTC。 |
TIMESTAMP | TimestampType[2] TimeUnit為納秒,timezone為UTC。 說明 TIMESTAMP類型支援的範圍範圍更廣,使用Storage API讀寫TIMESTAMP類型資料超出TimestampType精度範圍時,高精度部分的值會被截斷,此時會出現精度丟失的情況。 |
DATE | Date32Type |
INTERVAL_DAY_TIME | DayTimeIntervalType 說明 INTERVAL_DAY_TIME類型支援到納秒,Storage API DayTimeIntervalType類型支援到毫秒,使用Storage API讀寫 INTERVAL_DAY_TIME 資料時,納秒部分資訊會被截斷,此時會出現精度丟失的情況。 |
INTERVAL_YEAR_MONTH | MonthIntervalType |
ARRAY | ListType |
MAP | MapType 說明 如果MAP中存在重複Key (Duplicate Key) ,
例如:寫入未經處理資料: |
STRUCT | StructType |
JSON | StringType |