全部產品
Search
文件中心

MaxCompute:基於DLF1.0+OSS讀取湖上CSV資料

更新時間:Dec 03, 2025

本文介紹通過配置DLF,將資料從OSS抽取到DLF中繼資料中,並使用MaxCompute的external schema進行資料湖聯邦查詢。該方案可以方便地進行資料分析和處理,並保證資料的可靠性和安全性。

適用範圍

  • 服務開通

  • 支援地區

    地區名稱

    地區ID

    華東1(杭州)

    cn-hangzhou

    華東2(上海)

    cn-shanghai

    華北2(北京)

    cn-beijing

    華北3(張家口)

    cn-zhangjiakou

    華南1(深圳)

    cn-shenzhen

    中國香港

    cn-hongkong

    新加坡

    ap-southeast-1

    德國(法蘭克福)

    eu-central-1

  • MaxCompute、OSS和DLF必須部署在同一地區

操作步驟

步驟一:授予MaxCompute訪問DLF和OSS的許可權

操作MaxCompute專案的帳號未經授權無法訪問DLF和OSS服務,授權方式包含如下兩種:

  • 一鍵授權:當建立MaxCompute專案的帳號和部署DLF的帳號相同時,推薦直接單擊授權DLF一鍵授權。

  • 自訂授權:無論建立MaxCompute專案的帳號和部署DLF的帳號是否相同,都可以使用自訂授權DLF方式。

步驟二:準備OSS資料

  1. 登入OSS控制台,建立Bucket,本樣本中Bucket名為mc-lakehouse-dlf-oss。詳情請參見建立儲存空間

  2. 本文以分區表為例,在Bucket下建立總目錄mc_dlf_oss_pt/,在該目錄下建立四個子目錄並上傳檔案,分別為:

步驟三:DLF1.0抽取OSS中繼資料

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

  2. 在左側導覽列,選擇元数据 > 元数据管理

  3. 元数据管理頁面,單擊数据库頁簽。

    default数据目录下單擊新建数据库。配置如下參數:

    在當前中繼資料管理頁面,單擊資料庫頁簽,在default資料目錄下單擊建立資料庫。配置如下參數:

    參數

    是否必填

    說明

    所属数据目录

    必填

    樣本中是default資料目錄。

    数据库名称:

    必填

    自訂資料庫名稱,以字母開頭,長度為1-128位,允許字元為a-z、A-Z、0-9_,例如dlf_oss_csv

    数据库描述:

    選填

    自訂描述。

    选择路径:

    必填

    資料庫儲存位置,例如oss://mc-lakehouse-dlf-oss/metadb_save

  4. 在左側導覽列,選擇元数据 > 元数据抽取

    元数据抽取頁面,單擊新建抽取任务,進入新建抽取任务頁面。配置如下參數:

    1. 设置抽取源

      參數

      是否必填

      說明

      抽取任务名称

      必填

      自訂抽取任務名稱。

      OSS路径

      必填

      DLF会根据输入的OSS路径,自动创建表和分区。路径结构参考:oss://所选路径/表(可选)/分区(可选)/文件。例如抽取文件oss://my-bucket/my-path/my-table/dt=1/data.csv,若选择路径oss://my-bucket/my-path/,系统会以my_table作为表名,dt作为一个分区,抽取data.csv作为表的schema。注意表名所在的路径名需要字母开头,仅支持数字字母下划线组合。

      排除模式

      選填

      正则匹配需要排除的OSS路径名

      解析格式

      必填

      提供自动识别jsoncsvparquetorchudideltaavro等多種表格式。

    2. 设置目标信息

      參數

      是否必填

      說明

      所属数据目录

      必填

      選擇目標資訊所屬資料目錄。

      目标数据库

      必填

      選擇已構建的資料庫,例如dlf_oss_csv

      目标数据表前缀

      選填

      请输入目标数据表前缀,英文开头+英文大小写数字_,最多128位

      抽取任务发现表字段更新时

      必填

      • 仅新增列,不支持删除原有列

      • 更新表结构,根据最新探测的表结构生成新的表结果。(選擇該項後,中繼資料抽取結果會覆蓋原有重名的表,可能造成原有表丟失或不可用。)

      • 忽略更新,不修改任何表

      如何处理OSS中发现已删除对象

      必填

      • 删除对应的元数据

      • 忽略更新,不删除任何表

    3. 设置抽取任务

      參數

      是否必填

      說明

      RAM 角色

      必填

      Data Lake Formation服務通過扮演該角色來訪問使用者資源,可選擇系統預設AliyunDLFWorkFlowDefaultRole角色。

      执行策略

      選填

      作業的執行策略。

      • 手动执行

      • 调度执行

      抽取策略

      必填

      • 快速抽取:抽取中繼資料時只掃描每個檔案的部分資料,抽取作業消耗時間較短,抽取結果準確性低於全量抽取,可以在中繼資料編輯中調整中繼資料資訊。

      • 全量抽取:抽取中繼資料時掃描全量資料檔案,在資料規模比較大時,作業消耗時間長,抽取結果更準確。

    4. 單擊儲存並立即執行

  5. 查看抽取表

    1. 在左側導覽列,選擇元数据 > 元数据管理

    2. 元数据管理頁面,單擊数据库頁簽。

    3. 單擊目標資料庫名,進入該資料庫詳情頁,單擊表列表頁簽,可查看抽取的表。

      本樣本中,抽取的表為mc_dlf_oss_pt

  6. 若添加新分區資料,需要重新執行抽取任務。

步驟四:建立DLF1.0+OSS外部資料源

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

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

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

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

    參數

    是否必填

    說明

    外部数据源类型

    必填

    選擇DLF+OSS

    外部数据源名称

    必填

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

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

    • 不能超過128個字元。

    例如dlf_oss_csv_new

    外部数据源描述

    選填

    根據需要填寫。

    地域

    必填

    預設為當前地區。

    DLF Endpoint

    必填

    預設為當前地區的DLF Endpoint。

    OSS Endpoint

    必填

    預設為當前地區的OSS Endpoint。

    RoleARN

    必填

    RAM角色的ARN資訊。此角色需要包含能夠同時訪問DLF和OSS服務的許可權。

    1. 登入RAM控制台

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

    3. 基礎資訊地區,可以擷取ARN資訊。

    樣本:acs:ram::124****:role/aliyunodpsdefaultrole

    外部数据源补充属性

    選填

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

    說明

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

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

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

步驟五:建立外部schema

串連至MaxCompute,輸入以下命令:

SET odps.namespace.schema=true;

CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema>
WITH <external_data_source>
ON '<dlf_data_catalogue>.dlf_database';

參數說明如下:

  • external_schema:自訂外部Schema名稱。例如es_dlf_oss_csv

  • external_data_source:上述已建立的外部資料源名稱,外部Schema歸屬的專案必須與外部資料源處於同一地區。例如dlf_oss_csv

  • dlf_data_catalogueDLF資料目錄ID。資料目錄建立方法請參見建立資料目錄。例如122****

  • dlf_database:DLF中指定資料目錄下的資料庫名稱。詳情請參見資料庫表及函數。例如dlf_oss_csv

步驟六:使用SQL訪問OSS資料

  1. 登入MaxCompute用戶端,查詢external schema內的表。

SET odps.namespace.schema=true;
USE schema es_dlf_oss_csv;
SHOW tables IN es_dlf_oss_csv;

-- 返回結果:
ALIYUN$xxx:mc_dlf_oss_pt

OK
  1. 查詢external schema內的mc_dlf_oss表明細。

SET odps.namespace.schema=true;
SELECT * FROM <project_name>.es_dlf_oss_csv.mc_dlf_oss_pt WHERE direction='NE';

-- 返回結果如下:
+------------+------------+------------+------------+------------+------------+----------------+------------+
| _c0        | _c1        | _c2        | _c3        | _c4        | _c5        | _c6            | direction  | 
+------------+------------+------------+------------+------------+------------+----------------+------------+
| 1          | 2          | 13         | 1          | 46.81006   | -92.08174  | 9/14/2014 0:00 | NE         | 
| 1          | 3          | 48         | 1          | 46.81006   | -92.08174  | 9/14/2014 0:00 | NE         | 
| 1          | 9          | 4          | 1          | 46.81006   | -92.08174  | 9/15/2014 0:00 | NE         | 
+------------+------------+------------+------------+------------+------------+----------------+------------+

步驟七:將聯邦外表的資料複製入數倉

  1. 將聯邦外表的資料複製到數倉中。

    CREATE TABLE vehicle_copy AS 
    SELECT * FROM <project_name>.es_dlf_oss_csv.mc_dlf_oss_pt 
    WHERE direction='NE';
  2. 查詢數倉中已複製的表資料。

    SELECT * FROM vehicle_copy;
    
    -- 返回結果。
    +------------+------------+------------+------------+------------+------------+----------------+------------+
    | _c0        | _c1        | _c2        | _c3        | _c4        | _c5        | _c6            | direction  | 
    +------------+------------+------------+------------+------------+------------+----------------+------------+
    | 1          | 2          | 13         | 1          | 46.81006   | -92.08174  | 9/14/2014 0:00 | NE         | 
    | 1          | 3          | 48         | 1          | 46.81006   | -92.08174  | 9/14/2014 0:00 | NE         | 
    | 1          | 9          | 4          | 1          | 46.81006   | -92.08174  | 9/15/2014 0:00 | NE         | 
    +------------+------------+------------+------------+------------+------------+----------------+------------+