本文介紹通過配置DLF,將資料從OSS抽取到DLF中繼資料中,並使用MaxCompute的external schema進行資料湖聯邦查詢。該方案可以方便地進行資料分析和處理,並保證資料的可靠性和安全性。
適用範圍
操作步驟
步驟一:授予MaxCompute訪問DLF和OSS的許可權
操作MaxCompute專案的帳號未經授權無法訪問DLF和OSS服務,授權方式包含如下兩種:
步驟二:準備OSS資料
登入OSS控制台,建立Bucket,本樣本中Bucket名為
mc-lakehouse-dlf-oss。詳情請參見建立儲存空間。本文以分區表為例,在Bucket下建立總目錄
mc_dlf_oss_pt/,在該目錄下建立四個子目錄並上傳檔案,分別為:direction=N/:vehicle1.csvdirection=NE/:vehicle2.csvdirection=S/:vehicle3.csvdirection=SW/:vehicle4.csv
步驟三:DLF1.0抽取OSS中繼資料
登入資料湖構建(DLF)控制台,在左上方選擇地區。
在左側導覽列,選擇。
在元数据管理頁面,單擊数据库頁簽。
在default数据目录下單擊新建数据库。配置如下參數:
在當前中繼資料管理頁面,單擊資料庫頁簽,在default資料目錄下單擊建立資料庫。配置如下參數:
參數
是否必填
說明
所属数据目录
必填
樣本中是default資料目錄。
数据库名称:
必填
自訂資料庫名稱,以字母開頭,長度為1-128位,允許字元為a-z、A-Z、0-9_,例如
dlf_oss_csv。数据库描述:
選填
自訂描述。
选择路径:
必填
資料庫儲存位置,例如
oss://mc-lakehouse-dlf-oss/metadb_save。在左側導覽列,選擇。
在元数据抽取頁面,單擊新建抽取任务,進入新建抽取任务頁面。配置如下參數:
设置抽取源:
參數
是否必填
說明
抽取任务名称
必填
自訂抽取任務名稱。
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路径名
解析格式
必填
提供自动识别、json、csv、parquet、orc、hudi、delta、avro等多種表格式。
设置目标信息:
參數
是否必填
說明
所属数据目录
必填
選擇目標資訊所屬資料目錄。
目标数据库
必填
選擇已構建的資料庫,例如
dlf_oss_csv。目标数据表前缀
選填
请输入目标数据表前缀,英文开头+英文大小写数字_,最多128位
抽取任务发现表字段更新时
必填
仅新增列,不支持删除原有列。
更新表结构,根据最新探测的表结构生成新的表结果。(選擇該項後,中繼資料抽取結果會覆蓋原有重名的表,可能造成原有表丟失或不可用。)
忽略更新,不修改任何表。
如何处理OSS中发现已删除对象
必填
删除对应的元数据。
忽略更新,不删除任何表。
设置抽取任务:
參數
是否必填
說明
RAM 角色
必填
Data Lake Formation服務通過扮演該角色來訪問使用者資源,可選擇系統預設AliyunDLFWorkFlowDefaultRole角色。
执行策略
選填
作業的執行策略。
手动执行
调度执行
抽取策略
必填
快速抽取:抽取中繼資料時只掃描每個檔案的部分資料,抽取作業消耗時間較短,抽取結果準確性低於全量抽取,可以在中繼資料編輯中調整中繼資料資訊。
全量抽取:抽取中繼資料時掃描全量資料檔案,在資料規模比較大時,作業消耗時間長,抽取結果更準確。
單擊儲存並立即執行。
查看抽取表
在左側導覽列,選擇。
在元数据管理頁面,單擊数据库頁簽。
單擊目標資料庫名,進入該資料庫詳情頁,單擊表列表頁簽,可查看抽取的表。
本樣本中,抽取的表為
mc_dlf_oss_pt。
若添加新分區資料,需要重新執行抽取任務。
步驟四:建立DLF1.0+OSS外部資料源
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇 。
在外部数据源頁面,單擊创建外部数据源。
在彈出的新增外部数据源對話方塊,根據介面提示配置相關參數。參數說明如下:
參數
是否必填
說明
外部数据源类型
必填
選擇DLF+OSS。
外部数据源名称
必填
可自訂命名。命名規則如下:
以字母開頭,且只能包含小寫字母、底線和數字。
不能超過128個字元。
例如
dlf_oss_csv_new。外部数据源描述
選填
根據需要填寫。
地域
必填
預設為當前地區。
DLF Endpoint
必填
預設為當前地區的DLF Endpoint。
OSS Endpoint
必填
預設為當前地區的OSS Endpoint。
RoleARN
必填
RAM角色的ARN資訊。此角色需要包含能夠同時訪問DLF和OSS服務的許可權。
登入RAM控制台。
在左側導覽列選擇。
在基礎資訊地區,可以擷取ARN資訊。
樣本:
acs:ram::124****:role/aliyunodpsdefaultrole。外部数据源补充属性
選填
特殊聲明的外部資料源補充屬性。指定後,使用此外部資料源的任務可以按照參數定義的行為訪問源系統。
說明支援的具體參數請關注後續官網文檔更新說明,具體參數將隨產品能力演化逐步放開。
單擊確認,完成外部資料源的建立。
在外部数据源頁面,單擊目標資料來源對應的操作的详情,可查看資料來源詳細資料。
步驟五:建立外部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';參數說明如下:
步驟六:使用SQL訪問OSS資料
登入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查詢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 |
+------------+------------+------------+------------+------------+------------+----------------+------------+步驟七:將聯邦外表的資料複製入數倉
將聯邦外表的資料複製到數倉中。
CREATE TABLE vehicle_copy AS SELECT * FROM <project_name>.es_dlf_oss_csv.mc_dlf_oss_pt WHERE direction='NE';查詢數倉中已複製的表資料。
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 | +------------+------------+------------+------------+------------+------------+----------------+------------+