MaxCompute 推出外部項目,通過映射DLF catalog實現中繼資料與資料的即時訪問,委託DLF系統管理權限,支援對DLF全託管OSS上資料的中繼資料訪問和讀寫。該方式支援在catalog層級整體映射資料湖,實現基於Paimon的跨引擎協同。
適用範圍
目前該功能在MaxCompute屬於邀測階段。
只支援DLF全託管OSS上儲存的Paimon格式表。
不支援以INSERT INTO/OVERWRITE方式寫入Dynamic Bucket表和Cross Partition表。
SHOW TABLES操作不支援固定bucket且主鍵不包含分區鍵的Cross Partition表。
外部項目的表不支援schema evolution操作、分區操作。
不支援資源、函數操作。
不支援作為DataWorksData Integration的資料來源傳輸資料。
資料類型映射
MaxCompute資料類型請參見1.0資料類型版本和2.0資料類型版本。
開源Paimon資料類型 | MaxCompute 2.0資料類型 | 是否支援讀寫 | 說明 |
TINYINT | TINYINT |
| 8位有符號整型。 |
SMALLINT | SMALLINT |
| 16位有符號整型。 |
INT | INT |
| 32位有符號整型。 |
BIGINT | BIGINT |
| 64位有符號整型。 |
BINARY(MAX_LENGTH) | BINARY |
| 位元據類型,目前長度限制為8 MB。 |
FLOAT | FLOAT |
| 32位二進位浮點型。 |
DOUBLE | DOUBLE |
| 64位二進位浮點型。 |
DECIMAL(precision,scale) | DECIMAL(precision,scale) |
| 10進位精確數字類型,預設為
|
VARCHAR(n) | VARCHAR(n) |
| 變長字元類型。n為長度,[1,65535]。 |
CHAR(n) | CHAR(n) |
| 固定長度字元類型。n為長度,[1,255]。 |
VARCHAR(MAX_LENGTH) | STRING |
| 字串類型目前長度限制為8MB。 |
DATE | DATE |
| 日期類型格式為 |
TIME、TIME(p) | 不支援 |
| Paimon資料類型TIME,不帶時區的時間類型,由時分秒組成,精度可到納秒。 TIME(p)表示小數位的精度,0-9之間,預設為0。 MaxCompute側沒有映射的類型。 |
TIMESTAMP、TIMESTAMP(p) | TIMESTAMP_NTZ |
| 無時區時間戳記類型,精確到納秒。 讀表需開啟Native開關 |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
|
|
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME |
| 時間戳記類型,精確到納秒 格式為 |
BOOLEAN | BOOLEAN |
| BOOLEAN類型。 |
ARRAY | ARRAY |
| 複雜類型。 |
MAP | MAP |
| 複雜類型。 |
ROW | STRUCT |
| 複雜類型。 |
MULTISET<t> | 不支援 |
| MaxCompute側沒有映射的類型。 |
VARBINARY、VARBINARY(n)、BYTES | BINARY |
| 可變長度二進位字串的資料類型。 |
操作步驟
步驟一:授權
為RAM使用者授權
如果操作使用者是RAM使用者,請確保已綁定如下權限原則。添加許可權參考為管理RAM使用者的許可權。
AliyunRAMFullAccess:如果RAM使用者沒有此許可權,需要主帳號來完成授權。
AliyunMaxComputeFullAccess:用來完成建立外部資料源和外部項目操作。
AliyunDLFReadOnlyAccess:用來完成建立外部項目操作。因建立Paimon_DLF外部項目需要有DLF catalog的List許可權,故需要此權限原則。
授權並開通DLF
雲資源訪問授權
首次使用DLF時,要完成自動化授權操作,確保DLF能夠正常訪問相關雲資源。
登入資料湖構建(DLF)控制台,在左上方選擇地區。
在云资源访问授权右側,單擊授权。
開通資料湖構建
選定地區,MaxCompute和DLF必須部署在同一地區。使用DLF前,需要先完成開通操作,確保服務在目標地區的可用性。
在开通数据湖构建右側,單擊開通。
將DLF資料許可權賦予MaxCompute的訪問帳號
MaxCompute通過外部資料源和外部項目訪問Paimon_DLF的資料,需要先將DLF的資料相關許可權賦予MaxCompute的訪問帳號。
【使用任務執行者身份】本質是授予MaxCompute服務關聯角色訪問DLF的許可權,通過MaxCompute訪問DLF時,需要向DLF傳遞當前任務執行者身份,MaxCompute和 DLF同時將當前任務執行者限制在兩個產品各自的許可權範圍內,因此需要先為MaxCompute建立服務關聯角色並授權。步驟如下:
登入RAM控制台。
在左側導覽列選擇。
在角色頁面,單擊建立角色。
在建立角色頁面的右上方,單擊建立服務關聯角色。
在建立服務關聯角色頁面,選擇信任的雲端服務
AliyunServiceRoleForMaxComputeLakehouse,單擊建立服務關聯角色。若提示角色已經存在,說明已經授權過,忽略即可。
許可權說明
管控面許可權:即通過MaxCompute控制台操作時需要校正的許可權,主要發生在“建立MC的外表專案,綁定一個DLF Catalog”過程中。
這部分許可權由RAM存取控制管理,需要由主帳號登入RAM存取控制台配置相關操作,管理RAM使用者的許可權。
資料面許可權:即登入建立好的外部項目後,讀寫Paimon表時需要校正的許可權,主要發生在“建立/維護/使用被綁定的DLF Catalog中的Schema/Table以及其他資源的過程,一般在MC的SQL中執行”。
步驟二:建立Paimon_DLF外部資料源
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇 。
在外部数据源頁面,單擊创建外部数据源。
在彈出的新增外部数据源對話方塊,根據介面提示配置相關參數。參數說明如下:
參數
是否必填
說明
外部数据源类型
必填
選擇Paimon_DLF。
外部数据源名称
必填
可自訂命名。命名規則如下:
以字母開頭,且只能包含小寫字母、底線和數字。
不能超過128個字元。
例如
paimon_dlf。外部数据源描述
選填
根據需要填寫。
地域
必填
預設為當前地區。
認證和鑒權
必填
預設為阿里雲RAM角色。
关联服务角色
必填
預設產生。
Endpoint
必填
自動產生,杭州地區為:
cn-hangzhou-intranet.dlf.aliyuncs.com外部数据源补充属性
選填
特殊聲明的外部資料源補充屬性。指定後,使用此外部資料源的任務可以按照參數定義的行為訪問源系統。
說明支援的具體參數請關注後續官網文檔更新說明,具體參數將隨產品能力演化逐步放開。
單擊確認,完成外部資料源的建立。
在外部数据源頁面,單擊目標資料來源對應的操作的详情,可查看資料來源詳細資料。
步驟三:建立外部項目
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇。
在外部项目頁簽,單擊新建项目。
在彈出的新增项目對話方塊,根據介面提示文案設定項目資訊,單擊確認完成專案建立。
參數
是否必填
說明
项目类型
必填
預設為外部項目。
地域
必填
預設為當前地區,此處無法修改。
项目名称(全网唯一)
必填
字母開頭,包含字母、數字及底線(_),長度在3-28個字元。
MaxCompute外部数据源类型
選填
預設為Paimon_DLF。
MaxCompute外部数据源
選填
选择已有:會出現已經建立過的外部資料源。
新建外部数据源:即可建立並使用新的外部資料源。
MaxCompute外部数据源名称
必填
選擇已有:在下拉式清單中選擇已經建立好的外部資料源名稱。
建立外部資料源:則會使用建立的外部資料源名稱。
数据目录
必填
DLF資料目錄。
计算资源付费类型
必填
包年包月或按量付费。
默认Quota
必填
選擇已有Quota.
描述
選填
自訂專案描述。
步驟四:使用SQL訪問資料來源系統
選擇串連工具登入外部項目。
如下為DataWorks新版工作空間資料開發SQL節點操作樣本。
登入DataWorks控制台,在左上方選擇地區。
在左側導覽列選擇工作空間。
在工作空間列表頁面,單擊建立工作空間或單擊已有目標工作空間名稱。
在空間詳情頁面,單擊左側導覽列計算資源。
在計算資源頁面,單擊綁定計算資源,選擇MaxCompute。
填寫綁定MaxCompute計算資源的基本資料。
其中MaxCompute專案選擇外部項目。
列出外部項目中的schema。
-- 開啟session層級支援schema文法開關。 SET odps.namespace.schema=true; SHOW schemas; -- 樣本返回結果。 ID = 20250919****am4qb default system OK在外部項目中列出schema下的表。
如果需要在當前環境訪問生產外部項目的表,需要在所有SQL前加上
use externao_project_pro;-- schema_name為外部項目中show出來的Schema名稱。 SET odps.namespace.schema=true; USE schema <schema_name>; SHOW tables; -- 返回結果。 ID = 20250919****am4qb acs:ram::<uid>:root emp OK在外部項目中建立schema。
-- 本樣本中schema_name為schema_demo_test。 CREATE schema <schema_name>;使用建立的schema。
USE schema <schema_name>;在schema中建立表並插入資料。
如果是RAM使用者登入,此操作需要有DLF Catalog的操作許可權,授權操作見資料授權管理。
命令格式:
-- 建立表。 CREATE TABLE [IF NOT EXISTS] <table_name> ( <col_name> <data_type>, ... ) [COMMENT <table_comment>] [PARTITIONED BY (<col_name> <data_type>, ...)] ; -- 插入資料。 INSERT {INTO|OVERWRITE} TABLE <table_name> [PARTITION (<pt_spec>)] [(<col_name> [,<col_name> ...)]] <select_statement> FROM <from_statement>使用樣本:
說明針對Paimon源表TIMESTAMP低精度類型,在寫入時會截斷處理。0~3按照3位截斷,4~6按照6位截斷,7~9按照9位截斷。
CREATE TABLE schema_table(id int,name string); INSERT INTO schema_table VALUES (101,'張三'),(102,'李四'); -- 查詢表schema_table。 SELECT * FROM schema_table; -- 返回結果。 +------------+------------+ | id | name | +------------+------------+ | 101 | 張三 | | 102 | 李四 | +------------+------------+
切換為已有的default schema。
use schema default; SHOW tables; -- 返回結果樣本。 ID = 20250919*******yg5 acs:ram::<uid>:root emp acs:ram::<uid>:root emp_detail acs:ram::<uid>:root test_table OK -- 讀取表。 SELECT * FROM test_table; -- 返回結果。 +------------+------------+ | id | name | +------------+------------+ | 101 | 張三 | | 102 | 李四 | +------------+------------+ -- 寫入表並查詢寫入是否成功。 INSERT INTO test_table VALUES (103,'王五'); SELECT * FROM test_table; -- 返回結果。 +------------+------------+ | id | name | +------------+------------+ | 101 | 張三 | | 102 | 李四 | | 103 | 王五 | +------------+------------+
常見報錯
問題一:點擊建立外部項目報錯
問題描述:在建立外部項目時提示錯誤:“You are not authorized to perform this action.”

解決方案:
如果是RAM使用者,首先確認已經賦予RAM使用者
AliyunMaxComputeFullAccess許可權,詳情見操作步驟一。由於該入口會選擇到DLF的catalog,確認已經授予DLF相關操作許可權,詳情見操作步驟一。
問題二:在外部項目的default schema下執行show tables報錯
問題描述:外部項目的default schema下執行show tables,提示錯誤:“Forbidden:User acs: ram: :<uid>:user/** doesn't have privilege LIST on DATABASE default”。
解決方案:
登入資料湖構建(DLF)控制台,在左上方選擇地區。
在左側導覽列選擇系統和安全
在頁簽,重新整理查看當前RAM是否存在。
若存在,則在給RAM使用者授權。
問題三:報錯ivalid database operations on two-tier
問題描述:外部項目內執行show schemas報錯invalid database operations on two-tier。
解決方案:
首先確認當前使用的專案為外部項目。
若用DataWorks的SQL節點,點擊右側調試配置/調試配置,查看綁定的計算資源是否為外部項目。
若用DataWorks的SQL分析,點擊右上方資料來源,查看繫結資料源是否為外部項目。
若用MaxCompute的SQL分析,點擊右側回合組態,查看計算資源處選擇的專案是否為外部項目。
若用odpscmd,查看odps_config.ini檔案中的
project_name參數值是否為外部項目。
確認使用的是外部項目後,執行如下SQL,需選中一起執行。
-- 開啟session層級支援schema文法開關。 SET odps.namespace.schema=true; SHOW schemas;
問題四:執行show schemas只有default schema
問題描述:在外部項目內執行show schemas,返回結果只有default。
解決方案:
首先確認當前使用的專案是外部項目。
若用DataWorks的SQL節點,點擊右側調試配置/調試配置,查看綁定的計算資源是否為外部項目。
若用DataWorks的SQL分析,點擊右上方資料來源,查看繫結資料源是否為外部項目。
若用MaxCompute的SQL分析,點擊右側回合組態,查看計算資源處選擇的專案是否為外部項目。
若用odpscmd,查看 odps_config.ini 檔案中的
project_name參數值是否為外部項目。
確認是外部項目後,登入資料湖構建(DLF)控制台確認當前外部項目綁定的catalog下是否有其他資料庫。
如以上1和2確認完成,show schemas結果仍沒有預期的資料庫,可以提交工單反饋問題。
問題五:報錯You should use dynamic bucket (bucket = -1) mode in cross partition update
問題描述:外部項目內執行show tables報錯ODPS-0110005: com.aliyun.odps.meta.exception.MetaException: com.aliyun.odps.common.table.na.NativeException: common/table/jni/utils/jni_helper.cpp(79): UnretryableException: Common table connector exception - ExceptionType: java.lang.IllegalArgumentException - Message: You should use dynamic bucket (bucket = -1) mode in cross partition update case (Primary key constraint [sending_time, symbol, sequence_number] not include all partition fields [pt]).[pt])
解決方案:
MaxCompute目前不支援“固定bucket的cross partition pk表”,所以在show tables的時候會報錯。
臨時繞過方案:通過資料湖構建(DLF)控制台刪除不支援的cross partition pk表。
問題六:報錯Can't set default schema if odps.namespace.schema is false
問題描述:執行show tables/show schemas報錯 FAILED: Can't set default schema if odps.namespace.schema is false.
解決方案:
優先查看SQL前是否加了session層級支援schema文法開關
SET odps.namespace.schema=true;。如果開啟開關後還是報錯,需要確認指令順序,若要讀其他外部項目的表,參數正確順序如下:
USE external_project; SET odps.namespace.schema=true; USE schema schema_name; SHOW tables;