湖倉一體2.0使用指南
MaxCompute提供湖倉一體2.0方案,允許用戶建立定義外部數(shù)據(jù)源元數(shù)據(jù)和數(shù)據(jù)訪問方式的管理對(duì)象,并通過外部Schema映射機(jī)制實(shí)現(xiàn)直接訪問外部數(shù)據(jù)源Database或Schema范圍內(nèi)的全部表的功能。該方案可以打破數(shù)據(jù)湖與數(shù)據(jù)倉庫割裂的體系,并將數(shù)據(jù)湖的靈活性、豐富的多引擎生態(tài)與數(shù)據(jù)倉庫的企業(yè)級(jí)能力進(jìn)行融合,助力構(gòu)建數(shù)據(jù)湖和數(shù)據(jù)倉庫相融合的數(shù)據(jù)管理平臺(tái)(本功能處于公測(cè)階段)。
概念說明
數(shù)據(jù)倉庫與數(shù)據(jù)湖對(duì)比
類別
能力
數(shù)據(jù)倉庫
更強(qiáng)調(diào)對(duì)進(jìn)入數(shù)倉的結(jié)構(gòu)化、半結(jié)構(gòu)化數(shù)據(jù)的管理和約束,并依賴強(qiáng)管理能力,獲得更好的計(jì)算性能和更規(guī)范化的管理能力。
數(shù)據(jù)湖
更強(qiáng)調(diào)數(shù)據(jù)存儲(chǔ)的開放性和數(shù)據(jù)格式的通用性,支持多種引擎按需生產(chǎn)或消費(fèi)數(shù)據(jù),為保障靈活性只提供弱管理能力,可以兼容非結(jié)構(gòu)化數(shù)據(jù),并支持后建Schema的使用方式,是一種更靈活的數(shù)據(jù)管理方式。
MaxCompute數(shù)據(jù)倉庫
MaxCompute是基于Serverless架構(gòu)的云原生數(shù)據(jù)倉庫。您可以進(jìn)行如下操作:
使用MaxCompute進(jìn)行數(shù)據(jù)倉庫建模。
使用ETL工具將數(shù)據(jù)加載入有結(jié)構(gòu)定義的模型表中并存儲(chǔ)。
使用標(biāo)準(zhǔn)的SQL引擎處理數(shù)倉中的海量數(shù)據(jù),并通過Hologres OLAP引擎分析數(shù)據(jù)。
MaxCompute在數(shù)據(jù)湖上的使用場(chǎng)景和聯(lián)邦場(chǎng)景
在數(shù)據(jù)湖場(chǎng)景中,數(shù)據(jù)存在于湖上,并有多種引擎生產(chǎn)或消費(fèi)這些開放的數(shù)據(jù)。MaxCompute計(jì)算引擎作為湖上引擎的一種,也可以參與數(shù)據(jù)的加工和使用。此時(shí),MaxCompute需要讀取數(shù)據(jù)湖上游產(chǎn)生的數(shù)據(jù),兼容多種主流開源數(shù)據(jù)格式,在引擎內(nèi)計(jì)算,并持續(xù)向工作流下游生產(chǎn)數(shù)據(jù)。
同時(shí),MaxCompute作為安全、高性能和高性價(jià)比、匯聚了高價(jià)值數(shù)據(jù)的數(shù)倉,也需要能夠從數(shù)據(jù)湖上獲取元數(shù)據(jù)和數(shù)據(jù),進(jìn)行外部數(shù)據(jù)的引擎內(nèi)計(jì)算,并與倉內(nèi)數(shù)據(jù)做聯(lián)邦計(jì)算提取數(shù)據(jù)價(jià)值,向強(qiáng)管理的數(shù)倉匯聚。
除了在數(shù)據(jù)湖之上,MaxCompute作為數(shù)倉也需要獲取多種外部數(shù)據(jù)源的數(shù)據(jù),例如Hadoop、Hologres等,與倉內(nèi)數(shù)據(jù)做聯(lián)邦計(jì)算。在聯(lián)邦計(jì)算場(chǎng)景下,MaxCompute同樣需要支持讀取外部系統(tǒng)的元數(shù)據(jù)和數(shù)據(jù)。
MaxCompute湖倉一體2.0
MaxCompute湖倉一體2.0基于MaxCompute計(jì)算引擎,支持通過云產(chǎn)品互聯(lián)網(wǎng)絡(luò)訪問阿里云元數(shù)據(jù)或存儲(chǔ)服務(wù),或通過專線網(wǎng)絡(luò)訪問VPC中的外部數(shù)據(jù)源,允許用戶建立定義外部數(shù)據(jù)源元數(shù)據(jù)和數(shù)據(jù)訪問方式的管理對(duì)象,并通過外部Schema映射外部數(shù)據(jù)源的Database或Schema,實(shí)現(xiàn)直接訪問外部數(shù)據(jù)源Database或Schema范圍內(nèi)的全部表的能力。
網(wǎng)絡(luò)連接
詳情請(qǐng)參見訪問VPC方案(專線直連)中Networklink的相關(guān)說明。MaxCompute可以通過網(wǎng)絡(luò)連接訪問VPC網(wǎng)絡(luò)中的數(shù)據(jù)源,例如EMR實(shí)例,RDS實(shí)例(準(zhǔn)備中)。DLF(Data Lake Formation,數(shù)據(jù)湖構(gòu)建)、OSS(對(duì)象存儲(chǔ))和Hologres位于云產(chǎn)品互聯(lián)網(wǎng)絡(luò)中,MaxCompute無需設(shè)置網(wǎng)絡(luò)連接對(duì)象Networklink即可直接訪問其中的數(shù)據(jù)。
外部數(shù)據(jù)源(Foreign Server)
包含了元數(shù)據(jù)和數(shù)據(jù)訪問的信息,同時(shí)包含訪問數(shù)據(jù)源系統(tǒng)的身份認(rèn)證信息,位置信息和連接協(xié)議說明等。外部數(shù)據(jù)源是租戶面的管理對(duì)象,由租戶管理員定義。
在開啟了項(xiàng)目級(jí)別租戶資源訪問控制功能模式下,由租戶管理員將其掛載給使用外部數(shù)據(jù)源的項(xiàng)目,項(xiàng)目管理員再通過Policy將外部數(shù)據(jù)源的使用權(quán)限授予項(xiàng)目內(nèi)部的用戶。
外部Schema(External Schema)
外部Schema是MaxCompute數(shù)倉項(xiàng)目中一種特殊Schema,如上圖所示,可以映射數(shù)據(jù)源的Database或Schema,并可直接訪問對(duì)端Database或Schema范圍內(nèi)的表和數(shù)據(jù),這種通過外部Schema映射至對(duì)端數(shù)據(jù)庫的表被稱為聯(lián)邦外表。
聯(lián)邦外表在MaxCompute內(nèi)不存儲(chǔ)元數(shù)據(jù)信息,而是由MaxCompute通過外部數(shù)據(jù)源對(duì)象中的元數(shù)據(jù)服務(wù)實(shí)時(shí)獲取。用戶查詢時(shí)無需在數(shù)倉中通過DDL語句創(chuàng)建外部表,可直接以項(xiàng)目名稱和外部Schema名稱作為命名空間,引用數(shù)據(jù)源原表名的方式進(jìn)行操作。數(shù)據(jù)源表結(jié)構(gòu)或數(shù)據(jù)發(fā)生變化時(shí),聯(lián)邦外表能夠即時(shí)反映數(shù)據(jù)源表的最新狀態(tài)。外部Schema映射的數(shù)據(jù)源層次由外部數(shù)據(jù)源定義的層次與數(shù)據(jù)源中表層次之間的系統(tǒng)層次決定。外部數(shù)據(jù)源定義的層次由認(rèn)證身份能訪問的數(shù)據(jù)源層次決定。
外部項(xiàng)目(External Project)
在湖倉一體1.0中,外部項(xiàng)目是兩層模式,和外部Schema一樣映射一個(gè)數(shù)據(jù)源的Database或Schema,且需要依賴一個(gè)數(shù)倉項(xiàng)目才可以讀取外部數(shù)據(jù)并計(jì)算。但是外部項(xiàng)目層級(jí)較高,映射數(shù)據(jù)源Database或Schema會(huì)導(dǎo)致外部項(xiàng)目數(shù)量過多,且無法和三層模式的數(shù)倉項(xiàng)目共用,MaxCompute會(huì)逐步收斂湖倉一體1.0的外部項(xiàng)目,存量用戶可以遷移到外部Schema上。
在湖倉一體2.0中,用戶可以通過外部Schema承接湖倉一體1.0中外部項(xiàng)目的全部能力,外部項(xiàng)目直接映射對(duì)端三層模式數(shù)據(jù)源Catalog或Database,并直接可見DLF Catalog之下的Database,或Hologres Database之下的Schema ,再以聯(lián)邦外表的方式訪問數(shù)據(jù)源表。湖倉一體2.0的外部項(xiàng)目會(huì)稍后推出,請(qǐng)關(guān)注官網(wǎng)文檔說明。
數(shù)據(jù)源類型
外部數(shù)據(jù)源層次
外部Schema映射層次
湖倉一體2.0外部項(xiàng)目(稍后推出)映射層次
湖倉一體1.0外部項(xiàng)目(下線中)映射層次
認(rèn)證方式
DLF+OSS
Region級(jí)別DLF服務(wù)和OSS服務(wù)
DLF的Catalog.Database
DLF的Catalog
DLF的Catalog.Database
RAMRole
Hive+HDFS
EMR實(shí)例
Hive的Database
不支持
Hive的Database
免認(rèn)證方式
Hologres
Hologres實(shí)例的Database
Schema
Database
不支持
RAMRole
說明不同數(shù)據(jù)源的認(rèn)證方式有多種類型,MaxCompute會(huì)在后續(xù)版本逐步提供多種認(rèn)證方式,例如訪問Hologres使用當(dāng)前用戶身份方式、訪問Hive使用Kerberos認(rèn)證方式等。
使用限制
僅華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳)、中國香港、新加坡和德國(法蘭克福)地域支持構(gòu)建湖倉一體2.0能力。
MaxCompute需要與DLF、OSS部署在同一地域。
外部Schema操作需要在內(nèi)部項(xiàng)目中執(zhí)行,因此要求內(nèi)部項(xiàng)目必須已啟用三層模型,您可在控制臺(tái)界面進(jìn)行操作,詳情請(qǐng)參見功能開啟。
注意事項(xiàng)
您需要為MaxCompute項(xiàng)目(即將創(chuàng)建External Schema的目標(biāo)項(xiàng)目)開啟項(xiàng)目級(jí)元數(shù)據(jù)支持的Schema開關(guān),詳情請(qǐng)參見項(xiàng)目級(jí)元數(shù)據(jù)支持的Schema開關(guān)。
您需要在執(zhí)行Schema操作或查詢External Schema的數(shù)據(jù)前,開啟SQL語法支持的Schema開關(guān),詳情請(qǐng)參見SQL語法支持的Schema開關(guān)。
執(zhí)行
SHOW tables IN <external_schema_name>
命令(訪問數(shù)據(jù)源系統(tǒng))時(shí):若在DataWorks數(shù)據(jù)開發(fā)IDE中執(zhí)行,系統(tǒng)顯示無法解析Schema時(shí),除以上兩點(diǎn)之外,您還需要保證DataWorks資源組集成的MaxCompute CMD為V0.46.8及以上版本,若CMD版本低于V0.46.8,請(qǐng)?zhí)峤还温?lián)系MaxCompute技術(shù)支持人員進(jìn)行升級(jí)。
若在MaxCompute客戶端(odpscmd)中執(zhí)行,也需要將其升級(jí)至V0.46.8及以上版本。
說明您可以執(zhí)行
SHOW VERSION;
命令查看當(dāng)前版本。創(chuàng)建的外部Schema支持查看Schema列表、查看Schema信息及刪除Schema,其命令及使用方法與內(nèi)部Schema相同。詳情請(qǐng)參見Schema操作。
查看創(chuàng)建完成的外部數(shù)據(jù)源
在外部數(shù)據(jù)源管理列表中可以查看到已創(chuàng)建的外部表和數(shù)據(jù)源,參數(shù)信息如下:
參數(shù)名 | 描述 |
數(shù)據(jù)源名稱 | 外部數(shù)據(jù)源的名稱。 |
類型 | 外部數(shù)據(jù)源類型。目前支持DLF+OSS、Hive+HDFS和Hologres三種類型。 |
網(wǎng)絡(luò)連接 | 使用了網(wǎng)絡(luò)連接的外部數(shù)據(jù)源會(huì)顯示網(wǎng)絡(luò)連接名稱。目前只有Hive+HDFS類型支持使用網(wǎng)絡(luò)連接。 |
Owner賬號(hào) | 創(chuàng)建外部數(shù)據(jù)源的賬號(hào)信息,外部Schema等會(huì)依賴外部數(shù)據(jù)源訪問源端系統(tǒng),訪問的權(quán)限來源于外部數(shù)據(jù)源中創(chuàng)建者指定的身份信息。
|
已掛載項(xiàng)目 | 外部數(shù)據(jù)源掛載的項(xiàng)目數(shù)量。 |
創(chuàng)建時(shí)間 | 創(chuàng)建外部數(shù)據(jù)源的時(shí)間。 |
更新時(shí)間 | 上一次修改并保存外部數(shù)據(jù)源可編輯屬性的時(shí)間。 |
操作-掛載項(xiàng)目 | 創(chuàng)建者設(shè)置外部數(shù)據(jù)源與項(xiàng)目的掛載關(guān)系。
|
操作-詳情 | 查看外部數(shù)據(jù)源屬性。 |
操作-編輯 | 修改外部數(shù)據(jù)源屬性。 重要 修改了權(quán)限等信息,可能會(huì)造成項(xiàng)目內(nèi)配置的授權(quán)關(guān)系因?yàn)榭梢妼?duì)象范圍變化而失效。 |
操作-刪除 | 刪除當(dāng)前外部數(shù)據(jù)源。 重要 刪除外部數(shù)據(jù)源后,依賴此外部數(shù)據(jù)源的任務(wù)都會(huì)失去訪問外部系統(tǒng)的權(quán)限,且一并刪除此外部數(shù)據(jù)源與所有項(xiàng)目之間的已配置的掛載關(guān)系。 |
創(chuàng)建并使用DLF+OSS湖倉一體
DLF+OSS數(shù)據(jù)源是以O(shè)SS作為數(shù)據(jù)湖存儲(chǔ)服務(wù),以DLF為湖上元數(shù)據(jù)管理服務(wù)的常用數(shù)據(jù)湖形態(tài)。MaxCompute支持創(chuàng)建此類型的外部數(shù)據(jù)源。通過MaxCompute與DLF和OSS的組合,可以實(shí)現(xiàn)數(shù)據(jù)倉庫和數(shù)據(jù)湖的一體化,提供更加靈活和高效的數(shù)據(jù)管理和處理能力。
如您當(dāng)前賬號(hào)沒有開啟過租戶級(jí)Schema語法開關(guān),需要在下文SQL前增加SET odps.namespace.schema=true;
語句,以便后續(xù)執(zhí)行Schema相關(guān)語句。
步驟一:授權(quán)
當(dāng)您通過MaxCompute與DLF和OSS構(gòu)建湖倉一體時(shí),授權(quán)方法如下。MaxCompute項(xiàng)目的賬號(hào)未經(jīng)授權(quán)無法訪問DLF,您需要執(zhí)行授權(quán)操作。授權(quán)方式包含以下兩種:
一鍵授權(quán):當(dāng)創(chuàng)建MaxCompute項(xiàng)目的賬號(hào)和部署DLF的賬號(hào)相同時(shí)。推薦您直接單擊授權(quán)DLF進(jìn)行一鍵授權(quán)。
自定義授權(quán):當(dāng)創(chuàng)建MaxCompute項(xiàng)目的賬號(hào)和部署DLF的賬號(hào)相同或不相同,都可以使用該方式。詳情請(qǐng)參見自定義授權(quán)DLF。
步驟二:創(chuàng)建DLF+OSS外部數(shù)據(jù)源
登錄MaxCompute控制臺(tái),在左上角選擇地域。
在左側(cè)導(dǎo)航欄,選擇租戶管理>外部數(shù)據(jù)源。
在外部數(shù)據(jù)源頁面,單擊創(chuàng)建外部數(shù)據(jù)源。
在新增外部數(shù)據(jù)源對(duì)話框,根據(jù)界面提示配置相關(guān)參數(shù)。參數(shù)說明如下:
參數(shù)
說明
外部數(shù)據(jù)源類型
選擇DLF+OSS。
外部數(shù)據(jù)源名稱
可自定義命名。命名規(guī)則如下:
以字母開頭,且只能包含小寫字母、下劃線和數(shù)字。
不能超過128個(gè)字符。
外部數(shù)據(jù)源描述
根據(jù)需要填寫。
地域
默認(rèn)為當(dāng)前地域。
DLF Endpoint
默認(rèn)為當(dāng)前地域的DLF Endpoint。
OSS Endpoint
默認(rèn)為當(dāng)前地域的OSS Endpoint。
RoleARN
RAM角色的ARN信息。此角色需要包含能夠同時(shí)訪問DLF和OSS服務(wù)的權(quán)限。
您可以登錄RAM訪問控制臺(tái),在左側(cè)導(dǎo)航欄選擇身份管理>角色,單擊對(duì)應(yīng)的RAM角色名稱,即可在基本信息區(qū)域獲取ARN信息。
示例:
acs:ram::124****:role/aliyunodpsdefaultrole
。外部數(shù)據(jù)源補(bǔ)充屬性
為外部數(shù)據(jù)源特殊聲明的屬性,指定后,使用此外部數(shù)據(jù)源的任務(wù)可以按照參數(shù)定義的行為訪問源系統(tǒng)。
說明支持的具體參數(shù)請(qǐng)關(guān)注后續(xù)官網(wǎng)文檔更新說明,具體參數(shù)將隨產(chǎn)品能力演進(jìn)逐步放開。
單擊確定,完成外部數(shù)據(jù)源的創(chuàng)建。
步驟三:創(chuàng)建外部Schema
引用了DLF+OSS類型外部數(shù)據(jù)源的外部Schema創(chuàng)建命令如下:
CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema_name>
with <dlfoss_foreign_server_name>
ON '<dlf_calaog_id>.<database_name>';
參數(shù)說明如下:
external_schema_name:外部Schema名稱。
dlfoss_foreign_server_name:上述已創(chuàng)建的外部數(shù)據(jù)源名稱,外部Schema歸屬的項(xiàng)目必須與外部數(shù)據(jù)源處于同一地域。
dlf_calaog_id:DLF數(shù)據(jù)目錄ID。數(shù)據(jù)目錄創(chuàng)建方法請(qǐng)參見新建數(shù)據(jù)目錄(Catalog)。
database_name:DLF中指定數(shù)據(jù)目錄下的數(shù)據(jù)庫名稱。詳情請(qǐng)參見創(chuàng)建數(shù)據(jù)庫。
步驟四:使用SQL訪問數(shù)據(jù)源系統(tǒng)
命令格式:列出DLF和OSS的表名稱。
方式1:
SHOW tables IN <external_schema_name>; --external_schema_name為外部Schema名稱。
方式2:
USE SCHEMA <external_schema_name>; --external_schema_name為外部Schema名稱。 SHOW tables;
使用示例:
查詢名稱為
es_dlf
的外部Schema下的所有表名。USE SCHEMA es_dlf; SHOW TABLES;
返回結(jié)果示例:
ALIYUN$xxx@test.aliyunid.com:hellocsv ALIYUN$xxx@test.aliyunid.com:t1 ALIYUN$xxx@test.aliyunid.com:t2 ALIYUN$xxx@test.aliyunid.com:t3
查詢
lakehouse47_3
項(xiàng)目中es_dlf
Schema的hellocsv
表數(shù)據(jù)。SELECT * FROM lakehouse47_3.es_dlf.hellocsv;
返回結(jié)果示例:
+------------+------------+------------+------------+ | col1 | col2 | col3 | col4 | +------------+------------+------------+------------+ | 1 | hello | test | world | +------------+------------+------------+------------+
從數(shù)據(jù)源將聯(lián)邦外表
hellocsv
的數(shù)據(jù)復(fù)制入數(shù)倉。-- 將聯(lián)邦外表的數(shù)據(jù)復(fù)制到數(shù)倉中 CREATE TABLE hellocsv_copy AS SELECT * FROM lakehouse47_3.es_dlf.hellocsv; -- 查詢數(shù)倉中已復(fù)制的表數(shù)據(jù) SELECT * FROM hellocsv_copy;
返回結(jié)果示例:
+------------+------------+------------+------------+ | col1 | col2 | col3 | col4 | +------------+------------+------------+------------+ | 1 | hello | test | world | +------------+------------+------------+------------+
創(chuàng)建并使用Hive+HDFS聯(lián)邦
Hive是常見的開源大數(shù)據(jù)的數(shù)據(jù)倉庫解決方案,元數(shù)據(jù)大多存儲(chǔ)在HMS中,數(shù)據(jù)大多存儲(chǔ)在HDFS上。MaxCompute支持創(chuàng)建此類型的外部數(shù)據(jù)源。通過MaxCompute與Hive的聯(lián)邦,可以實(shí)現(xiàn)數(shù)據(jù)倉庫訪問、匯聚開源大數(shù)據(jù)系統(tǒng)數(shù)據(jù)的能力。
Hive+HDFS模式的SQL后付費(fèi)聯(lián)邦計(jì)算任務(wù)在公測(cè)期間暫不收費(fèi)。
如您當(dāng)前賬號(hào)沒有開啟過租戶級(jí)Schema語法開關(guān),需要在SQL前增加
SET odps.namespace.schema=true;
語句,以便后續(xù)執(zhí)行Schema相關(guān)語句。
步驟一:創(chuàng)建Hive+HDFS外部數(shù)據(jù)源
登錄MaxCompute控制臺(tái),在左上角選擇地域。
在左側(cè)導(dǎo)航欄,選擇租戶管理>外部數(shù)據(jù)源。
在外部數(shù)據(jù)源頁面,單擊創(chuàng)建外部數(shù)據(jù)源。
在新增外部數(shù)據(jù)源對(duì)話框,根據(jù)界面提示配置相關(guān)參數(shù)。參數(shù)說明如下:
參數(shù)
說明
外部數(shù)據(jù)源類型
選擇Hive+HDFS。
外部數(shù)據(jù)源名稱
可自定義命名。命名規(guī)則如下:
以字母開頭,且只能包含小寫字母、下劃線和數(shù)字。
不能超過128個(gè)字符。
外部數(shù)據(jù)源描述
根據(jù)需要填寫。
網(wǎng)絡(luò)連接對(duì)象
網(wǎng)絡(luò)連接名稱,選擇或創(chuàng)建MaxCompute到阿里云E-MapReduce或Hadoop VPC網(wǎng)絡(luò)的連接。參數(shù)詳情請(qǐng)參見訪問VPC方案(專線直連)中的創(chuàng)建MaxCompute與目標(biāo)VPC網(wǎng)絡(luò)間的網(wǎng)絡(luò)連接步驟。
說明網(wǎng)絡(luò)連接基本概念請(qǐng)參見Networklink。
VPC必須與MaxCompute外部數(shù)據(jù)源及外部數(shù)據(jù)源掛載的項(xiàng)目處于同一地域。
集群名稱
在Hadoop集群高可用環(huán)境下用于指代NameNode的名稱。在構(gòu)建Hadoop集群場(chǎng)景下,您可以通過hdfs-site.xml文件中的
dfs.nameservices
配置參數(shù)獲取集群名稱。NameNode 地址
目標(biāo)Hadoop集群的Active和Standby NameNode服務(wù)地址和端口號(hào)(端口號(hào)通常是8020)。您可聯(lián)系Hadoop集群管理員獲取。
HMS 服務(wù)地址
目標(biāo)Hadoop集群的Active和Standby NameNode的Hive元數(shù)據(jù)服務(wù)地址和端口號(hào)(端口號(hào)通常是9083)。您可聯(lián)系Hadoop集群管理員獲取。
認(rèn)證類型
暫時(shí)僅支持無認(rèn)證方式。
外部數(shù)據(jù)源補(bǔ)充屬性
為外部數(shù)據(jù)源特殊聲明的屬性,指定后,使用此外部數(shù)據(jù)源的任務(wù)可以按照參數(shù)定義的行為訪問源系統(tǒng)。
說明支持的具體參數(shù)請(qǐng)關(guān)注后續(xù)官網(wǎng)文檔更新說明,具體參數(shù)將隨產(chǎn)品能力演進(jìn)逐步放開。
單擊確定,完成外部數(shù)據(jù)源的創(chuàng)建。
步驟二:創(chuàng)建外部Schema
外部Schema是項(xiàng)目內(nèi)的對(duì)象,可以使用SQL進(jìn)行操作。若您當(dāng)前賬號(hào)沒有打開過租戶級(jí)別Schema語法開關(guān),需要在SQL前增加SET odps.namespace.schema=true;
語句,以方便后續(xù)執(zhí)行Schema相關(guān)命令。
引用了Hive+HDFS類型的外部數(shù)據(jù)源的外部Schema創(chuàng)建命令如下:
CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema_name>
WITH <hive_foreign_server_name>
ON '<database_name>' ;
參數(shù)說明如下:
external_schema_name:外部Schema名稱。
hive_foreign_server_name:已創(chuàng)建的外部數(shù)據(jù)源名稱。
database_name:Hive數(shù)據(jù)庫名稱。
步驟三:使用SQL訪問數(shù)據(jù)源系統(tǒng)
命令格式:列出Hive的表名稱。
方式1:
SHOW tables IN <external_schema_name>; --external_schema_name為外部Schema名稱。
方式2:
USE SCHEMA <external_schema_name>; --external_schema_name為外部Schema名稱。 SHOW tables;
使用示例:
查詢名稱為
es_hive3
的外部Schema下的所有表名。USE SCHEMA es_hive3; SHOW TABLES;
返回結(jié)果示例:
ALIYUN$xxx@test.aliyunid.com:t1
查詢
lakehouse47_3
項(xiàng)目中es_hive3
Schema的t1
表數(shù)據(jù)。SELECT * FROM lakehouse47_3.es_hive3.t1;
返回結(jié)果示例:
+------------+ | id | +------------+ | 1 | +------------+
從數(shù)據(jù)源將聯(lián)邦外表
hellocsv
的數(shù)據(jù)復(fù)制入數(shù)倉。-- 將聯(lián)邦外表的數(shù)據(jù)復(fù)制到數(shù)倉中 CREATE TABLE t1_copy AS SELECT * FROM lakehouse47_3.es_hive3.t1; -- 查詢數(shù)倉中已復(fù)制的表數(shù)據(jù) SELECT * FROM t1_copy;
返回結(jié)果示例:
+------------+ | id | +------------+ | 1 | +------------+
創(chuàng)建并使用Hologres聯(lián)邦
Hologres是一站式實(shí)時(shí)數(shù)據(jù)倉庫引擎,支持海量數(shù)據(jù)實(shí)時(shí)寫入、實(shí)時(shí)更新、實(shí)時(shí)分析,支持標(biāo)準(zhǔn)SQL(兼容PostgreSQL協(xié)議),支持PB級(jí)數(shù)據(jù)多維分析(OLAP)與即席分析(Ad Hoc),支持高并發(fā)低延遲的在線數(shù)據(jù)服務(wù)(Serving)。Hologres與MaxCompute深度融合,Hologres可以支持MaxCompute數(shù)倉上的OLAP模型的創(chuàng)建、分析和查詢。MaxCompute支持創(chuàng)建Hologres外部數(shù)據(jù)源,通過與Hologres的聯(lián)邦,可以實(shí)現(xiàn)以下場(chǎng)景。
超大規(guī)模數(shù)據(jù)倉庫讀取實(shí)時(shí)數(shù)倉的數(shù)據(jù)并歸檔。
讀取維度數(shù)據(jù)或數(shù)據(jù)集市模型數(shù)據(jù),與ODS、DWD、DWS層事實(shí)表關(guān)聯(lián)計(jì)算。
讀取OLAP模型數(shù)據(jù)進(jìn)行高性能低成本離線計(jì)算,并將模型結(jié)果通過Hologres外部表或遠(yuǎn)端函數(shù)調(diào)用等方式返回給實(shí)時(shí)數(shù)倉進(jìn)行分析。
如您當(dāng)前賬號(hào)沒有開啟過租戶級(jí)Schema語法開關(guān),需要在下文SQL前增加SET odps.namespace.schema=true;
語句,以便后續(xù)執(zhí)行Schema相關(guān)語句。
步驟一:創(chuàng)建Hologres外部數(shù)據(jù)源
登錄MaxCompute控制臺(tái),在左上角選擇地域。
在左側(cè)導(dǎo)航欄,選擇租戶管理>外部數(shù)據(jù)源。
在外部數(shù)據(jù)源頁面,單擊創(chuàng)建外部數(shù)據(jù)源。
在新增外部數(shù)據(jù)源對(duì)話框,根據(jù)界面提示配置相關(guān)參數(shù)。參數(shù)說明如下:
參數(shù)
說明
外部數(shù)據(jù)源類型
選擇Hologres。
外部數(shù)據(jù)源名稱
可自定義命名。命名規(guī)則如下:
以字母開頭,且只能包含小寫字母、下劃線和數(shù)字。
不能超過128個(gè)字符。
外部數(shù)據(jù)源描述
根據(jù)需要填寫。
連接方式
目前只支持云產(chǎn)品互聯(lián)網(wǎng)絡(luò)連接方式。
Host
Hologres實(shí)例的Host信息。
您可以登錄Hologres管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇實(shí)例列表,并單擊對(duì)應(yīng)的實(shí)例ID,即可在實(shí)例詳情頁面的網(wǎng)絡(luò)信息區(qū)域獲取Host。
示例:
hgpostcn-cn-3m***-cn-shanghai-internal.hologres.aliyuncs.com
。Port
Hologres實(shí)例的端口信息。
您可以登錄Hologres管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇實(shí)例列表,并單擊對(duì)應(yīng)的實(shí)例ID,即可在實(shí)例詳情頁面的網(wǎng)絡(luò)信息區(qū)域獲取端口。端口一般為
80
。DBNAME
Hologres實(shí)例的數(shù)據(jù)庫名稱。
認(rèn)證方式
RAMRole:使用RAM角色扮演認(rèn)證鑒權(quán)方式,支持跨主賬號(hào)的方式訪問Hologres。聯(lián)邦外表暫時(shí)只支持RAMRole方式。RoleARN填寫示例:
acs:ram::uid:role/aliyunodpsholorole
。aliyunodpsholorole
角色配置及授權(quán),詳情請(qǐng)參見創(chuàng)建Hologres外部表(STS模式)。ExecuteWithUserAuth:MaxCompute和Hologres之間的用戶身份互認(rèn)模式,允許MaxCompute和Hologres基于相同的賬號(hào),當(dāng)前用戶以自身的身份可以在兩個(gè)系統(tǒng)中看到有權(quán)訪問的表和數(shù)據(jù),可以直接通過
CALL EXEC_EXTERNAL_QUERY
函數(shù)執(zhí)行命令,不需要額外設(shè)置認(rèn)證信息。重要ExecuteWithUserAuth模式暫不支持聯(lián)邦外表使用方式。
RoleARN
RAM角色的ARN信息,此角色需要包含能夠訪問Hologres服務(wù)的權(quán)限。認(rèn)證方式選擇RAMRole時(shí)需要填寫該參數(shù)。
您可以登錄RAM訪問控制臺(tái),在左側(cè)導(dǎo)航欄選擇身份管理>角色,單擊對(duì)應(yīng)的RAM角色名稱,即可在基本信息區(qū)域獲取ARN信息。
外部數(shù)據(jù)源補(bǔ)充屬性
為外部數(shù)據(jù)源特殊聲明的屬性,指定后,使用此外部數(shù)據(jù)源的任務(wù)可以按照參數(shù)定義的行為訪問源系統(tǒng)。
說明支持的具體參數(shù)請(qǐng)關(guān)注后續(xù)官網(wǎng)文檔更新說明,具體參數(shù)將隨產(chǎn)品能力演進(jìn)逐步放開。
單擊確定,完成外部數(shù)據(jù)源的創(chuàng)建。
步驟二:創(chuàng)建外部Schema
外部Schema是項(xiàng)目內(nèi)的對(duì)象,可以使用SQL進(jìn)行操作。若您當(dāng)前賬號(hào)沒有打開過租戶級(jí)別Schema語法開關(guān),需要在SQL前增加SET odps.namespace.schema=true;
語句,以方便后續(xù)執(zhí)行Schema相關(guān)命令。
引用了Hologres類型外部數(shù)據(jù)源的外部Schema創(chuàng)建命令如下:
CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema_name>
with <holo_foreign_server_name>
ON '<holoschema_name>' ;
參數(shù)說明如下:
external_schema_name:外部Schema名稱。
holo_foreign_server_name:已創(chuàng)建的外部數(shù)據(jù)源名稱。
holoschema_name:Hologres需要映射的Schema名稱。
步驟三:使用SQL訪問數(shù)據(jù)源系統(tǒng)
命令格式:列出Hologres Schema中的表名稱。
方式1:
SHOW tables IN <external_schema_name>; --external_schema_name為外部Schema名稱。
方式2:
USE SCHEMA <external_schema_name>; --external_schema_name為外部Schema名稱。 SHOW tables;
使用示例:
查詢名稱為
es_holo_rolearn_nonl
的外部Schema下的所有表名:SET odps.namespace.schema=true; USE SCHEMA es_holo_rolearn_nonl; SHOW TABLES;
返回結(jié)果示例:
ALIYUN$xxx@test.aliyunid.com:mc_holo_external
查詢
lakehouse47_3
項(xiàng)目中es_holo_rolearn_nonl
Schema的mc_holo_external
表數(shù)據(jù)。SELECT * FROM lakehouse47_3.es_holo_rolearn_nonl.mc_holo_external;
返回結(jié)果示例:
+------------+------------+------------+------------+ | col1 | col2 | col3 | col4 | +------------+------------+------------+------------+ | 1 | hello | test | world | +------------+------------+------------+------------+
從數(shù)據(jù)源將聯(lián)邦外表
hellocsv
的數(shù)據(jù)復(fù)制入數(shù)倉。-- 將聯(lián)邦外表的數(shù)據(jù)復(fù)制到數(shù)倉中 CREATE TABLE mc_holo_external_copy AS SELECT * FROM lakehouse47_3.es_holo_rolearn_nonl.mc_holo_external; -- 查詢數(shù)倉中已復(fù)制的表數(shù)據(jù) SELECT * FROM mc_holo_external_copy;
返回結(jié)果示例:
+------------+------------+------------+------------+ | col1 | col2 | col3 | col4 | +------------+------------+------------+------------+ | 1 | hello | test | world | +------------+------------+------------+------------+
基于當(dāng)前用戶身份向Hologres提交執(zhí)行命令
MaxCompute支持使用CALL命令,運(yùn)行EXEC_EXTERNAL_QUERY函數(shù),向Hologres側(cè)提交可執(zhí)行的SQL命令。
命令語法
CALL EXEC_EXTERNAL_QUERY ( '<holo_ExecuteWithUserAuth_foreign_server_name>', r"###( <holo_query>)###");
holo_ExecuteWithUserAuth_foreign_server_name
:即上文中以ExecuteWithUserAuth模式創(chuàng)建的Hologres外部數(shù)據(jù)源名稱。r
:表示即將執(zhí)行的命令。holo_query
:是在邊界符中填寫的具體Hologres SQL命令。
說明函數(shù)參考C++的Raw String方式,用
""
和()
加delimiter的邊界符方式,避免前后邊界符與holo_query
中的特殊字符發(fā)生沖突。 delimiter字符串可以修改,注意"[delimiter]( )[delimiter]"
一定要前后成對(duì)。邊界符不包括<>
,建議的邊界符為"###(<holo_query>)###"
。使用示例
示例1:在MaxCompute中提交一條向Hologres內(nèi)部表
public.current_user_test
進(jìn)行INSERT OVERWRITE
操作的SQL,數(shù)據(jù)來源是Hologres查詢當(dāng)前用戶UID的Query:SELECT current_user;
在MaxCompute中執(zhí)行如下SQL。
CALL EXEC_EXTERNAL_QUERY ( 'fs_holo_ExecuteWithUserAuth_nonl_y', r"###( CALL hg_insert_overwrite( 'public.current_user_test', $$SELECT current_user$$ );)###");
在Hologres中查詢內(nèi)部表
public.current_user_test
的數(shù)據(jù)。SELECT * FROM current_user_test;
返回結(jié)果:返回當(dāng)前MaxCompute側(cè)與Hologres側(cè)相同用戶身份的UID,如
1117xxxxxx519
。
示例2:在MaxCompute中提交一條向Hologres內(nèi)部表
public.hologres_parent_insert1
,分區(qū)子表是2020,進(jìn)行INSERT OVERWRITE
操作的SQL,數(shù)據(jù)來源是Hologres內(nèi)部的一張基于MaxCompute表的外部表:SELECT * FROM mc_external_table WHERE a='2020';
在MaxCompute中執(zhí)行如下SQL。
CALL EXEC_EXTERNAL_QUERY ( 'fs_holo_ExecuteWithUserAuth_nonl_y', r"###( CALL hg_insert_overwrite( 'public.hologres_parent_insert1', '2020', $$SELECT * FROM mc_external_table WHERE a='2020'$$ );)###");
在Hologres中查詢內(nèi)部表
public.hologres_parent_insert1
的數(shù)據(jù)。-- hologres查表,會(huì)多一條數(shù)據(jù) SELECT * FROM hologres_parent_insert1;
返回結(jié)果:
a b c d 2020 1 2024-06-19 10:27:46.201636 a
外部數(shù)據(jù)源的權(quán)限配置
外部數(shù)據(jù)源是MaxCompute租戶面的資源對(duì)象,RAM用戶是否能夠執(zhí)行對(duì)外部數(shù)據(jù)源的操作,取決于租戶管理員在RAM訪問控制臺(tái)的權(quán)限管理>權(quán)限策略中對(duì)外部數(shù)據(jù)源配置的權(quán)限,創(chuàng)建權(quán)限策略詳情請(qǐng)參見通過腳本編輯模式創(chuàng)建自定義權(quán)限策略。
示例:使用阿里云賬號(hào)創(chuàng)建一條名為ForeignServerTest的權(quán)限策略,并將其授權(quán)給子賬號(hào)。權(quán)限策略示例如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "odps:CreateForeignServer",
"Resource": "acs:odps:*:12xxxxxxxx07:foreignservers/*"
}
]
}
增加查詢?nèi)客獠繑?shù)據(jù)源和獲取某個(gè)外部數(shù)據(jù)源信息的權(quán)限:
如果您在創(chuàng)建外部數(shù)據(jù)源(CreateForeignServer)的同時(shí),需要指定NetworkLink,則Resource中需要添加networklink。
如果指定了RAM Role,需要有對(duì)RAM Role的
ram:PassRole
權(quán)限。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"odps:CreateForeignServer",
"odps:GetForeignServer",
"odps:ListForeignServers"
],
"Resource": "acs:odps:*:12xxxxxxxx07:foreignservers/*"
}
]
}
其他Action說明如下:
Action名稱 | 描述 |
CreateForeignServer | 創(chuàng)建外部數(shù)據(jù)源。 |
UpdateForeignServer | 更新外部數(shù)據(jù)源。 |
DeleteForeignServer | 刪除外部數(shù)據(jù)源。 |
GetForeignServer | 獲取某個(gè)外部數(shù)據(jù)源信息。 |
ListForeignServers | 查詢?nèi)客獠繑?shù)據(jù)源。 |
將已創(chuàng)建的Policy授權(quán)給子賬號(hào),即可對(duì)已授權(quán)的外部數(shù)據(jù)源執(zhí)行相應(yīng)操作。
項(xiàng)目級(jí)別租戶資源訪問控制
湖倉一體2.0引入的外部數(shù)據(jù)源是一種租戶粒度的資源,權(quán)限由RAM Policy控制。而用戶在項(xiàng)目中使用歸屬項(xiàng)目的對(duì)象(例如表),權(quán)限由項(xiàng)目管理員控制。對(duì)于租戶對(duì)象是否有權(quán)被項(xiàng)目使用,以及在項(xiàng)目中使用權(quán)限的再分配,有兩種安全管理模式。
若開啟項(xiàng)目級(jí)別租戶資源訪問控制,創(chuàng)建者可以通過設(shè)置外部數(shù)據(jù)源與項(xiàng)目的掛載關(guān)系,指定哪些項(xiàng)目可以使用其創(chuàng)建的外部數(shù)據(jù)源,再由項(xiàng)目管理員通過Policy對(duì)項(xiàng)目內(nèi)部的用戶授予使用外部數(shù)據(jù)源的權(quán)限。
若未開啟項(xiàng)目級(jí)別租戶資源訪問控制,任何創(chuàng)建了外部項(xiàng)目或外部Schema的用戶,都可以使用此外部數(shù)據(jù)源,訪問外部系統(tǒng)時(shí)同樣基于外部數(shù)據(jù)源中創(chuàng)建者指定的RAMRole權(quán)限進(jìn)行訪問。除了湖倉一體2.0引入的外部數(shù)據(jù)源,網(wǎng)絡(luò)連接、自定義鏡像、配額組(Quota)也是租戶粒度的對(duì)象,一起受項(xiàng)目級(jí)別租戶資源訪問控制開關(guān)的控制。
項(xiàng)目級(jí)別租戶資源訪問控制詳情請(qǐng)參見項(xiàng)目級(jí)別租戶資源訪問控制。目前此功能僅提供預(yù)覽,暫不支持開啟檢查。
開啟項(xiàng)目級(jí)別租戶資源訪問控制,使用外部數(shù)據(jù)源和外部Schema訪問聯(lián)邦外表需要執(zhí)行如下操作:
進(jìn)行租戶對(duì)象與項(xiàng)目的掛載關(guān)系配置,配置方法為點(diǎn)擊租戶對(duì)象,例如外部數(shù)據(jù)源,選擇掛載的項(xiàng)目,確定完成關(guān)系的配置。掛載完成的租戶對(duì)象可以在項(xiàng)目的已掛載租戶對(duì)象列表中查詢到。
對(duì)于已掛載到項(xiàng)目上的租戶對(duì)象,進(jìn)行Policy配置。配置方法參考Policy權(quán)限控制。
操作步驟
在MaxCompute控制臺(tái)的工作區(qū)>項(xiàng)目管理頁面,單擊目標(biāo)Project操作列的管理。
在角色權(quán)限頁簽,單擊目標(biāo)角色操作列的編輯角色。
在編輯角色對(duì)話框中,選擇授權(quán)方式為Policy。
在Policy授權(quán)腳本框中修改角色Policy。
示例
以外部數(shù)據(jù)源為例,配置用戶a可以使用外部數(shù)據(jù)源fs_hive的Policy如下:
{ "Statement":[ { "Action":[ "odps:Usage" ], "Effect":"Allow", "Resource":[ "acs:odps:*:servers/fs_hive" ] } ], "Version":"1" }
當(dāng)用戶具有租戶資源使用權(quán)限后,才可以在開啟項(xiàng)目級(jí)別租戶資源訪問控制模式下,進(jìn)行用戶/角色粒度的租戶資源使用權(quán)限控制。
項(xiàng)目開啟租戶對(duì)象檢查開關(guān)(即開啟項(xiàng)目級(jí)別租戶資源訪問控制)。
登錄MaxCompute控制臺(tái),選擇地域。
在左側(cè)導(dǎo)航欄的工作區(qū)>項(xiàng)目管理頁面,單擊目標(biāo)Project操作列的管理。
在參數(shù)配置頁簽的權(quán)限屬性區(qū)域,單擊編輯。
打開開啟項(xiàng)目級(jí)別租戶資源訪問控制開關(guān),并單擊提交。
重要開啟后,項(xiàng)目將立即對(duì)正在使用和后續(xù)使用的租戶對(duì)象(包括外部數(shù)據(jù)源、網(wǎng)絡(luò)連接、自定義鏡像、配額組(quota))進(jìn)行使用權(quán)限校驗(yàn)。因此在沒有完全完成租戶對(duì)象與項(xiàng)目的掛載關(guān)系配置,以及Policy授權(quán)之前,請(qǐng)勿輕易打開檢查開關(guān)。權(quán)限缺失可能會(huì)造成依賴權(quán)限的任務(wù)失敗。
外部Schema內(nèi)對(duì)聯(lián)邦外表授權(quán)
當(dāng)外部Schema創(chuàng)建成功后,其表的所有者歸屬于外部Schema的賬號(hào)。如果您需要將外部Schema權(quán)限或表操作權(quán)限授予其他用戶,請(qǐng)執(zhí)行下述操作。
由于MaxCompute在湖倉一體模式下不持久化數(shù)據(jù)源的元數(shù)據(jù),權(quán)限策略依據(jù)數(shù)據(jù)源對(duì)象名稱管理。數(shù)據(jù)源對(duì)象名稱變更會(huì)導(dǎo)致授權(quán)失效,須通過Revoke命令或刪除Policy方式移除授權(quán);未及時(shí)移除可能導(dǎo)致新同名對(duì)象繼承舊策略的權(quán)限定義,允許原用戶獲得外部項(xiàng)目中的數(shù)據(jù)源新同名對(duì)象的非預(yù)期權(quán)限。
開啟Project內(nèi)租戶對(duì)象鑒權(quán)后,創(chuàng)建外部Schema之前需要將當(dāng)前項(xiàng)目掛載在外部數(shù)據(jù)源上,如果沒有提前進(jìn)行掛載操作,會(huì)在創(chuàng)建外部Schema的時(shí)候報(bào)錯(cuò)
假設(shè)創(chuàng)建和管理External Schema的項(xiàng)目名稱為test_lakehouse_project:
操作 | 所需權(quán)限 | 示例步驟 |
創(chuàng)建External Schema |
|
|
查詢?nèi)縀xternal Schema | Project的CreateInstance和List權(quán)限。 |
|
查詢某個(gè)External Schema | Schema的Describe權(quán)限。 |
|
修改External Schema屬性 | 目前暫不支持修改External Schema屬性。 | |
刪除某個(gè)External Schema | Schema的Drop權(quán)限。 |
|
使用某個(gè)External Schema |
| 指定當(dāng)前使用某個(gè)External Schema。
若項(xiàng)目從兩層模式升級(jí)為三層模式,需要對(duì)指定的Schema授予Describe權(quán)限。
|
查詢某個(gè)External Schema下的表 | Schema內(nèi)表的Select權(quán)限 |
|
將某個(gè)External Schema下的表數(shù)據(jù)導(dǎo)入至內(nèi)部表 |
|
|