全部產品
Search
文件中心

Data Lake Formation:MaxCompute訪問DLF

更新時間:Mar 25, 2026

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進位精確數字類型,預設為decimal(38,18)。允許自訂precision和scale值。

  • precision:表示最多可以表示多少位的數字。預設取值範圍:1 <= precision <= 38

  • scale:表示小數部分的位元。預設取值範圍: 0 <= scale <= 18

VARCHAR(n)

VARCHAR(n)

已開通

變長字元類型。n為長度,[1,65535]。

CHAR(n)

CHAR(n)

已開通

固定長度字元類型。n為長度,[1,255]。

VARCHAR(MAX_LENGTH)

STRING

已開通

字串類型目前長度限制為8MB。

DATE

DATE

已開通

日期類型格式為yyyy-mm-dd

TIME、TIME(p)

不支援

未開通

Paimon資料類型TIME,不帶時區的時間類型,由時分秒組成,精度可到納秒。

TIME(p)表示小數位的精度,0-9之間,預設為0。

MaxCompute側沒有映射的類型。

TIMESTAMP、TIMESTAMP(p)

TIMESTAMP_NTZ

已開通

無時區時間戳記類型,精確到納秒。

讀表需開啟Native開關SET odps.sql.common.table.jni.disable.native=true;

TIMESTAMP WITH LOCAL TIME_ZONE(9)

TIMESTAMP

已開通

  • 時間戳記類型,精確到納秒格式為yyyy-mm-dd hh:mm:ss.xxxxxxxxx

  • 針對Paimon源表TIMESTAMP低精度類型,在寫入時會截斷處理。0~3按照3位截斷,4~6按照6位截斷,7~9按照9位截斷。

TIMESTAMP WITH LOCAL TIME_ZONE(9)

DATETIME

未開通

時間戳記類型,精確到納秒

格式為yyyy-mm-dd hh:mm:ss.xxxxxxxxx

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

  1. 雲資源訪問授權

    首次使用DLF時,要完成自動化授權操作,確保DLF能夠正常訪問相關雲資源。

    登入資料湖構建(DLF)控制台,在左上方選擇地區。

    云资源访问授权右側,單擊授权

  2. 開通資料湖構建

    選定地區,MaxCompute和DLF必須部署在同一地區。使用DLF前,需要先完成開通操作,確保服務在目標地區的可用性。

    开通数据湖构建右側,單擊開通

將DLF資料許可權賦予MaxCompute的訪問帳號

MaxCompute通過外部資料源和外部項目訪問Paimon_DLF的資料,需要先將DLF的資料相關許可權賦予MaxCompute的訪問帳號。

【使用任務執行者身份】本質是授予MaxCompute服務關聯角色訪問DLF的許可權,通過MaxCompute訪問DLF時,需要向DLF傳遞當前任務執行者身份,MaxCompute和 DLF同時將當前任務執行者限制在兩個產品各自的許可權範圍內,因此需要先為MaxCompute建立服務關聯角色並授權。步驟如下:

  1. 登入RAM控制台

  2. 在左側導覽列選擇身份管理 > 角色

  3. 角色頁面,單擊建立角色

  4. 建立角色頁面的右上方,單擊建立服務關聯角色

  5. 建立服務關聯角色頁面,選擇信任的雲端服務AliyunServiceRoleForMaxComputeLakehouse,單擊建立服務關聯角色

    若提示角色已經存在,說明已經授權過,忽略即可。

許可權說明

  • 管控面許可權:即通過MaxCompute控制台操作時需要校正的許可權,主要發生在“建立MC的外表專案,綁定一個DLF Catalog”過程中。

    這部分許可權由RAM存取控制管理,需要由主帳號登入RAM存取控制台配置相關操作,管理RAM使用者的許可權

  • 資料面許可權:即登入建立好的外部項目後,讀寫Paimon表時需要校正的許可權,主要發生在“建立/維護/使用被綁定的DLF Catalog中的Schema/Table以及其他資源的過程,一般在MC的SQL中執行”。

    這部分許可權由DLF控制台管理,需要由主帳號登入DLF控制台配置相關操作,為RAM使用者授權

步驟二:建立Paimon_DLF外部資料源

  1. 登入MaxCompute控制台,在左上方選擇地區。

  2. 在左側導覽列,選擇管理配置 > 外部数据源 。

  3. 外部数据源頁面,單擊创建外部数据源

  4. 在彈出的新增外部数据源對話方塊,根據介面提示配置相關參數。參數說明如下:

    參數

    是否必填

    說明

    外部数据源类型

    必填

    選擇Paimon_DLF

    外部数据源名称

    必填

    可自訂命名。命名規則如下:

    • 以字母開頭,且只能包含小寫字母、底線和數字。

    • 不能超過128個字元。

    例如paimon_dlf

    外部数据源描述

    選填

    根據需要填寫。

    地域

    必填

    預設為當前地區。

    認證和鑒權

    必填

    預設為阿里雲RAM角色。

    关联服务角色

    必填

    預設產生。

    Endpoint

    必填

    自動產生,杭州地區為:cn-hangzhou-intranet.dlf.aliyuncs.com

    外部数据源补充属性

    選填

    特殊聲明的外部資料源補充屬性。指定後,使用此外部資料源的任務可以按照參數定義的行為訪問源系統。

    說明

    支援的具體參數請關注後續官網文檔更新說明,具體參數將隨產品能力演化逐步放開。

  5. 單擊確認,完成外部資料源的建立。

  6. 外部数据源頁面,單擊目標資料來源對應的操作详情,可查看資料來源詳細資料。

步驟三:建立外部項目

  1. 登入MaxCompute控制台,在左上方選擇地區。

  2. 在左側導覽列,選擇管理配置 > 项目管理

  3. 外部项目頁簽,單擊新建项目

  4. 在彈出的新增项目對話方塊,根據介面提示文案設定項目資訊,單擊確認完成專案建立。

    參數

    是否必填

    說明

    项目类型

    必填

    預設為外部項目。

    地域

    必填

    預設為當前地區,此處無法修改。

    项目名称(全网唯一)

    必填

    字母開頭,包含字母、數字及底線(_),長度在3-28個字元。

    MaxCompute外部数据源类型

    選填

    預設為Paimon_DLF。

    MaxCompute外部数据源

    選填

    • 选择已有:會出現已經建立過的外部資料源。

    • 新建外部数据源:即可建立並使用新的外部資料源。

    MaxCompute外部数据源名称

    必填

    • 選擇已有:在下拉式清單中選擇已經建立好的外部資料源名稱。

    • 建立外部資料源:則會使用建立的外部資料源名稱。

    数据目录

    必填

    DLF資料目錄。

    计算资源付费类型

    必填

    包年包月按量付费

    默认Quota

    必填

    選擇已有Quota.

    描述

    選填

    自訂專案描述。

步驟四:使用SQL訪問資料來源系統

  1. 選擇串連工具登入外部項目。

    如下為DataWorks新版工作空間資料開發SQL節點操作樣本。

    1. 登入DataWorks控制台,在左上方選擇地區。

    2. 在左側導覽列選擇工作空間

    3. 工作空間列表頁面,單擊建立工作空間或單擊已有目標工作空間名稱。

    4. 空間詳情頁面,單擊左側導覽列計算資源

    5. 計算資源頁面,單擊綁定計算資源,選擇MaxCompute

    6. 填寫綁定MaxCompute計算資源基本資料

      其中MaxCompute專案選擇外部項目。

  2. 列出外部項目中的schema。

    -- 開啟session層級支援schema文法開關。
    SET odps.namespace.schema=true;
    SHOW schemas;
    
    -- 樣本返回結果。 
    ID = 20250919****am4qb
    default
    system
    
    
    OK
  3. 在外部項目中列出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
  4. 在外部項目中建立schema。

    -- 本樣本中schema_name為schema_demo_test。
    CREATE schema <schema_name>;
  5. 使用建立的schema。

    USE schema <schema_name>;
  6. 在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        | 李四        | 
      +------------+------------+
  7. 切換為已有的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.”

image

解決方案

  1. 如果是RAM使用者,首先確認已經賦予RAM使用者AliyunMaxComputeFullAccess許可權,詳情見操作步驟一。

  2. 由於該入口會選擇到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”。

解決方案

  1. 登入資料湖構建(DLF)控制台,在左上方選擇地區。

  2. 在左側導覽列選擇系統和安全

  3. 存取控制 > 使用者頁簽,重新整理查看當前RAM是否存在。

  4. 若存在,則在存取控制 > 角色給RAM使用者授權。

問題三:報錯ivalid database operations on two-tier

問題描述:外部項目內執行show schemas報錯invalid database operations on two-tier。

解決方案

  1. 首先確認當前使用的專案為外部項目。

    1. 若用DataWorks的SQL節點,點擊右側調試配置/調試配置,查看綁定的計算資源是否為外部項目。

    2. 若用DataWorks的SQL分析,點擊右上方資料來源,查看繫結資料源是否為外部項目。

    3. 若用MaxCompute的SQL分析,點擊右側回合組態,查看計算資源處選擇的專案是否為外部項目。

    4. 若用odpscmd,查看odps_config.ini檔案中的project_name參數值是否為外部項目。

  2. 確認使用的是外部項目後,執行如下SQL,需選中一起執行。

    -- 開啟session層級支援schema文法開關。
    SET odps.namespace.schema=true;
    SHOW schemas;

問題四:執行show schemas只有default schema

問題描述:在外部項目內執行show schemas,返回結果只有default。

解決方案

  1. 首先確認當前使用的專案是外部項目。

    1. 若用DataWorks的SQL節點,點擊右側調試配置/調試配置,查看綁定的計算資源是否為外部項目。

    2. 若用DataWorks的SQL分析,點擊右上方資料來源,查看繫結資料源是否為外部項目。

    3. 若用MaxCompute的SQL分析,點擊右側回合組態,查看計算資源處選擇的專案是否為外部項目。

    4. 若用odpscmd,查看 odps_config.ini 檔案中的project_name參數值是否為外部項目。

  2. 確認是外部項目後,登入資料湖構建(DLF)控制台確認當前外部項目綁定的catalog下是否有其他資料庫。

  3. 如以上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.

解決方案

  1. 優先查看SQL前是否加了session層級支援schema文法開關 SET odps.namespace.schema=true;

  2. 如果開啟開關後還是報錯,需要確認指令順序,若要讀其他外部項目的表,參數正確順序如下:

    USE external_project;
    SET odps.namespace.schema=true;
    USE schema schema_name;
    SHOW tables;