MaxCompute+DLF+OSS湖倉一體的湖查詢和湖數(shù)據(jù)入倉實(shí)踐
MaxCompute、DLF和OSS是阿里云提供的一體化解決方案,可以實(shí)現(xiàn)數(shù)據(jù)湖查詢和湖數(shù)據(jù)入倉。通過配置DLF,將數(shù)據(jù)從OSS導(dǎo)入到MaxCompute中,并使用MaxCompute進(jìn)行數(shù)據(jù)湖查詢。該方案可以方便地進(jìn)行數(shù)據(jù)分析和處理,并保證數(shù)據(jù)的可靠性和安全性。
前提條件
已開通OSS服務(wù),并準(zhǔn)備測試數(shù)據(jù)。
在OSS管理控制臺創(chuàng)建存儲空間(Bucket),詳情請參見OSS控制臺快速入門。
下載湖倉一體測試數(shù)據(jù)測試數(shù)據(jù),解壓后上傳至已創(chuàng)建的Bucket目錄。
已開通DLF服務(wù),并導(dǎo)入OSS測試數(shù)據(jù)。
在開通DLF頁面開通DLF服務(wù)。
登錄數(shù)據(jù)湖管理控制臺,新建元數(shù)據(jù)庫,詳情請參見創(chuàng)建元數(shù)據(jù)庫。
創(chuàng)建元數(shù)據(jù)抽取任務(wù),導(dǎo)入OSS測試數(shù)據(jù),詳情請參見元數(shù)據(jù)抽取。
已創(chuàng)建MaxCompute項(xiàng)目,詳情請參見創(chuàng)建MaxCompute項(xiàng)目。
已創(chuàng)建DataWorks工作空間,并綁定MaxCompute數(shù)據(jù)源。
創(chuàng)建DataWorks工作空間詳情請參見創(chuàng)建并管理工作空間,綁定MaxCompute數(shù)據(jù)源請參見綁定MaxCompute引擎。
使用限制
僅華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳)、中國香港、新加坡和德國(法蘭克福)地域支持構(gòu)建湖倉一體能力。
MaxCompute、OSS和DLF必須部署在同一地域。
操作步驟
步驟一:授予MaxCompute訪問DLF和OSS的權(quán)限
操作MaxCompute項(xiàng)目的賬號未經(jīng)授權(quán)無法訪問DLF和OSS服務(wù),您需要執(zhí)行授權(quán)操作。授權(quán)方式包含如下兩種:
一鍵授權(quán):當(dāng)創(chuàng)建MaxCompute項(xiàng)目的賬號和部署DLF的賬號相同時(shí),推薦您直接單擊授權(quán)DLF進(jìn)行一鍵授權(quán)。
自定義授權(quán):無論創(chuàng)建MaxCompute項(xiàng)目的賬號和部署DLF的賬號是否相同,都可以使用自定義授權(quán)DLF方式。
步驟二:通過MaxCompute外部項(xiàng)目查詢數(shù)據(jù)湖數(shù)據(jù)
如果您的賬號開啟了租戶級別Schema開關(guān),執(zhí)行下述代碼前需要關(guān)閉三層模型,即設(shè)置以下參數(shù)set odps.namespace.schema=false;
。
基于已創(chuàng)建的MaxCompute項(xiàng)目、DLF元數(shù)據(jù)庫和OSS存儲空間,創(chuàng)建External Project,用于關(guān)聯(lián)DLF和OSS,并映射至已創(chuàng)建的MaxCompute項(xiàng)目。后續(xù)可通過映射的MaxCompute項(xiàng)目對External Project進(jìn)行數(shù)據(jù)分析操作。僅MaxCompute項(xiàng)目的所有者(Project Owner)或具備Admin、Super_Administrator角色的用戶可以創(chuàng)建External Project。更多MaxCompute構(gòu)建湖倉一體操作,請參見MaxCompute湖倉一體概述。
在DataWorks控制臺創(chuàng)建External Project。
登錄DataWorks控制臺,并選擇地域。
在左側(cè)導(dǎo)航欄選擇更多 > 數(shù)據(jù)湖集成(湖倉一體)。
在數(shù)據(jù)湖集成(湖倉一體)頁面,單擊現(xiàn)在開始創(chuàng)建。
在新建數(shù)據(jù)湖集成頁面,按照界面指引進(jìn)行操作。參數(shù)說明及示例如下:
參數(shù)
描述
示例
創(chuàng)建數(shù)據(jù)倉庫
外部項(xiàng)目名稱
自定義外部項(xiàng)目名稱。
ext_project_oss
MaxCompute項(xiàng)目
所綁定的MaxCompute內(nèi)部項(xiàng)目名稱。
parctice_test
創(chuàng)建外部數(shù)據(jù)湖連接
External Project描述
可選。外部項(xiàng)目描述。
無
異構(gòu)數(shù)據(jù)平臺類型
選擇阿里云DLF+OSS數(shù)據(jù)湖連接。
無
DLF所在區(qū)
連接DLF所在的可用區(qū),請根據(jù)地域進(jìn)行選擇。
cn-hangzhou
DLF Endpoint
DLF的對內(nèi)服務(wù)Endpoint,請根據(jù)地域進(jìn)行選擇。
dlf-share.cn-hangzhou.aliyuncs.com
DLF數(shù)據(jù)庫名稱
連接DLF的目標(biāo)數(shù)據(jù)庫名稱。您可以登錄DLF控制臺,在左側(cè)導(dǎo)航欄元數(shù)據(jù)管理下拉列表下的元數(shù)據(jù)庫頁面獲取。
practice_db
DLF RoleARN
可選。RAM角色的ARN信息。采用自定義授權(quán)方式時(shí),需要配置該參數(shù)。您可以登錄RAM訪問控制臺,在左側(cè)導(dǎo)航欄身份管理下拉列表下的角色頁面獲取。
無
單擊創(chuàng)建,然后單擊預(yù)覽。若能預(yù)覽DLF庫中的表信息,則表示External Project創(chuàng)建成功。
在DataWorks臨時(shí)查詢頁面,查看External Project下的表。
命令示例:
show tables in ext_project_oss;
返回結(jié)果:
ALIYUN$***@aliyun.com:nation_orcnation_orc ALIYUN$***@aliyun.com:partsupp_orcpartsupp_orc ALIYUN$***@aliyun.com:supplier_orcsupplier_orc
在DataWorks臨時(shí)查詢頁面,查詢External Project中的表數(shù)據(jù)。
命令示例:
SELECT ps_partkey, sum(ps_supplycost * ps_availqty) as value FROM ext_project_oss.partsupp_orcpartsupp_orc, ext_project_oss.supplier_orcsupplier_orc, ext_project_oss.nation_orcnation_orc WHERE ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' GROUP BY ps_partkey HAVING sum(ps_supplycost * ps_availqty) > ( SELECT sum(ps_supplycost * ps_availqty) * 0.000001 FROM ext_project_oss.partsupp_orcpartsupp_orc, ext_project_oss.supplier_orcsupplier_orc, ext_project_oss.nation_orcnation_orc WHERE ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' ) ORDER BY value desc;
部分返回結(jié)果如下:
ps_partkey value 465863 19882392.75 1319068 19234404.98 1001261 18184602.42 441166 18072201.77 1609960 18035338.6 1082959 17756303.25 140601 17537986.68 316323 17521596.97 971926 17462615.06 1472570 17397733.88 987594 17163087.65 ... ...
步驟三:將外部項(xiàng)目數(shù)據(jù)導(dǎo)入內(nèi)部表
如果需要?jiǎng)?chuàng)建與外部數(shù)據(jù)源中表結(jié)構(gòu)相同的表,可以使用
CREATE TABLE...LIKE
命令復(fù)制外部數(shù)據(jù)源中的表結(jié)構(gòu),詳情請參見表操作。命令示例如下。-- 創(chuàng)建表 CREATE TABLE from_exe_tbl LIKE ext_project_oss.partsupp_orcpartsupp_orc; -- 此時(shí)from_exe_tbl的表結(jié)構(gòu)與 ext_project_oss.partsupp_orcpartsupp_orc 完全相同。 -- 除生命周期屬性外,列名、列注釋以及表注釋等均相同。 -- 但 ext_project_oss.partsupp_orcpartsupp_orc 中的數(shù)據(jù)不會被復(fù)制到from_exe_tbl表中。 -- 查詢表 SELECT * FROM from_exe_tbl; -- 查看表結(jié)構(gòu) DESC from_exe_tbl;
如果需要基于外部數(shù)據(jù)源中的表創(chuàng)建新表,并復(fù)制數(shù)據(jù),但不復(fù)制分區(qū)屬性,可以使用
CREATE TABLE...AS
命令復(fù)制外部數(shù)據(jù)源中表結(jié)構(gòu)及數(shù)據(jù),詳情請參見表操作。命令示例如下。-- 創(chuàng)建表 CREATE TABLE from_exe_tb2 AS SELECT * FROM ext_project_oss.partsupp_orcpartsupp_orc; -- 此時(shí)from_exe_tb2的表結(jié)構(gòu)與 ext_project_oss.partsupp_orcpartsupp_orc 完全相同。 -- 除生命周期屬性外,列名、列注釋以及表注釋等均相同。 -- ext_project_oss.partsupp_orcpartsupp_orc 中的數(shù)據(jù)也會被復(fù)制到from_exe_tb2表中。 -- 查詢表 SELECT * FROM from_exe_tb2; -- 查看表結(jié)構(gòu) DESC from_exe_tb2;