管理MaxCompute Catalog
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細(xì)閱讀。
配置MaxCompute Catalog后,您可以在Flink全托管作業(yè)開發(fā)中直接訪問MaxCompute中存儲的表,無需再定義Schema。本文為您介紹如何在Flink全托管模式下創(chuàng)建、查看、使用及刪除MaxCompute Catalog。
背景信息
MaxCompute Catalog通過查詢MaxCompute服務(wù)來獲取MaxCompute中已存儲物理表的Schema信息,您無需在Flink SQL中聲明MaxCompute連接表的Schema便可以獲取具體的字段信息。MaxCompute Catalog具有以下功能特點(diǎn):
MaxCompute Catalog中的數(shù)據(jù)庫名對應(yīng)MaxCompute的項(xiàng)目名,您可以通過切換數(shù)據(jù)庫來使用不同MaxCompute項(xiàng)目中的表。
MaxCompute Catalog中的表名對應(yīng)MaxCompute中存儲的物理表名,自動(dòng)映射數(shù)據(jù)類型,無需再通過DDL語句手動(dòng)注冊MaxCompute表,提升開發(fā)效率和正確性。
MaxCompute Catalog提供的表可以直接作為Flink SQL作業(yè)中的源表、維表和結(jié)果表使用。
在MaxCompute Catalog中創(chuàng)建表能夠自動(dòng)在MaxCompute服務(wù)中創(chuàng)建對應(yīng)的物理表,并自動(dòng)映射數(shù)據(jù)類型,提升開發(fā)效率。
本文將從以下方面為您介紹如何管理MaxCompute Catalog:
使用限制
僅Flink計(jì)算引擎VVR 6.0.7及以上版本支持配置MaxCompute Catalog。
MaxCompute Catalog不支持創(chuàng)建數(shù)據(jù)庫,即MaxCompute中的項(xiàng)目。
MaxCompute Catalog不支持修改表結(jié)構(gòu)。
MaxCompute Catalog不支持CREATE TABLE AS(CTAS)語句。
創(chuàng)建MaxCompute Catalog
支持UI與SQL命令兩種方式配置MaxCompute Catalog,推薦使用UI方式配置MaxCompute Catalog。
UI方式(推薦)
進(jìn)入元數(shù)據(jù)管理頁面。
登錄實(shí)時(shí)計(jì)算控制臺,單擊目標(biāo)工作空間操作列下的控制臺。
單擊元數(shù)據(jù)管理。
單擊創(chuàng)建Catalog,選擇ODPS后,單擊下一步。
填寫參數(shù)配置信息。
重要Catalog創(chuàng)建完成后,以下配置信息都不支持修改。如果需要修改,您需要?jiǎng)h除掉已創(chuàng)建的Catalog,重新進(jìn)行創(chuàng)建。
參數(shù)
說明
類型
是否必填
備注
catalog name
MaxCompute Catalog的名稱。
String
是
請?zhí)顚憺樽远x的英文名。
endpoint
MaxCompute服務(wù)連接站點(diǎn)。
String
是
具體站點(diǎn)請參見Endpoint。
accessId
訪問MaxCompute服務(wù)所使用阿里云賬號的AccessKey ID。
String
是
該賬號需要對Catalog訪問的項(xiàng)目有admin權(quán)限。
accessKey
訪問MaxCompute服務(wù)所使用阿里云賬號的AccessKey Secret。
String
是
無。
project
Catalog中作為默認(rèn)數(shù)據(jù)庫的MaxCompute項(xiàng)目名。
String
否
若不設(shè)置該值,默認(rèn)項(xiàng)目為default。
單擊確定。
創(chuàng)建完成后,元數(shù)據(jù)下即可查看新建的Catalog。
SQL方式
在查詢腳本文本編輯區(qū)域,輸入配置MaxCompute Catalog的命令。
CREATE CATALOG `<catalogName>` WITH ( 'type' = 'odps', 'endpoint' = '<odpsEndpoint>', 'accessId' = '<aliyunAccountAccessId>', 'accessKey' = '<aliyunAccountAccessKey>', 'project' = '<defaultProject>', 'userAccount' = '<RAMUserAccount>' );
參數(shù)詳情如下表所示。
參數(shù)
說明
類型
是否必填
備注
catalogName
MaxCompute Catalog的名稱。
String
是
請?zhí)顚憺樽远x的英文名。
type
Catalog類型。
String
是
固定值為odps。
endpoint
MaxCompute服務(wù)連接站點(diǎn)。
String
是
具體站點(diǎn)請參見Endpoint。
accessId
訪問MaxCompute服務(wù)所使用阿里云賬號的AccessKey ID。
String
是
該賬號需要對Catalog訪問的項(xiàng)目有admin權(quán)限。
accessKey
訪問MaxCompute服務(wù)所使用阿里云賬號的AccessKey Secret。
String
是
無。
project
Catalog中作為默認(rèn)數(shù)據(jù)庫的MaxCompute項(xiàng)目名。
String
否
若不設(shè)置該值,默認(rèn)項(xiàng)目為default。
userAccount
阿里云賬號或RAM用戶名稱。
String
否
若使用的AccessKey非主賬號,僅對主賬號下的部分項(xiàng)目有admin權(quán)限,則需要設(shè)置該參數(shù)為賬號名稱,例如
RAM$[<account_name>:]<RAM_name>
,MaxCompute Catalog將僅展示該賬號有權(quán)限的項(xiàng)目列表。MaxCompute用戶權(quán)限管理參見用戶規(guī)劃與管理。
選中創(chuàng)建Catalog的代碼后,單擊左側(cè)代碼行數(shù)上的運(yùn)行。
查看MaxCompute Catalog
UI方式(推薦)
進(jìn)入元數(shù)據(jù)管理頁面。
單擊目標(biāo)工作空間操作列下的控制臺。
單擊元數(shù)據(jù)管理。
在Catalog列表頁面,查看Catalog名稱和類型。
如果您需要查看目標(biāo)Catalog下的數(shù)據(jù)庫和表,請單擊查看。
SQL方式
在查詢腳本文本編輯區(qū)域,輸入以下命令:
DESCRIBE `<catalogName>`.`<projectName>`.`<tableName>`;
參數(shù)
說明
catalogName
MaxCompute Catalog名稱。
projectName
MaxCompute中的項(xiàng)目名。
tableName
MaxCompute中存儲的物理表名。
選中查看Catalog的代碼后,單擊左側(cè)代碼行數(shù)上的運(yùn)行。
運(yùn)行成功后,可以在編輯區(qū)域下方的結(jié)果一欄中看到MaxCompute物理表在Flink中對應(yīng)的Schema信息。
使用MaxCompute Catalog
通過Catalog創(chuàng)建MaxCompute物理表
通過Flink SQL DDL,在MaxCompute Catalog中創(chuàng)建表時(shí),會自動(dòng)在對應(yīng)的MaxCompute項(xiàng)目中創(chuàng)建對應(yīng)的物理表,并自動(dòng)將Flink中的類型轉(zhuǎn)換為MaxCompute中的類型,支持創(chuàng)建非分區(qū)表和分區(qū)表。
創(chuàng)建非分區(qū)表示例:
CREATE TABLE `<catalogName>`.`<projectName>`.`<tableName>` (
f0 INT,
f1 BIGINT,
f2 DOUBLE,
f3 STRING
);
執(zhí)行完成后,您可以在MaxCompute中查看對應(yīng)項(xiàng)目中的表,可以看到已創(chuàng)建對應(yīng)名字的非分區(qū)表,其列名稱、類型與Flink DDL中對應(yīng)。
創(chuàng)建分區(qū)表示例:
CREATE TABLE `<catalogName>`.`<projectName>`.`<tableName>` (
f0 INT,
f1 BIGINT,
f2 DOUBLE,
f3 STRING,
ds STRING
) PARTITIONED BY (ds);
在Flink DDL的Schema末尾添加分區(qū)列,并在PARTITIONED BY
語句中聲明分區(qū)列名,執(zhí)行完成后查看對應(yīng)MaxCompute項(xiàng)目中的表,可以看到已創(chuàng)建對應(yīng)名字的分區(qū)表,其普通列為f0、f1、f2、f3,分區(qū)列為ds。
MaxCompute中列名均為小寫,而Flink中列名區(qū)分大小寫,若DDL中列名包含大寫字母將被自動(dòng)轉(zhuǎn)換成小寫,若DDL中包含多個(gè)轉(zhuǎn)換成小寫后同名的列,則會報(bào)錯(cuò)。
從MaxCompute Catalog表中讀取數(shù)據(jù)
MaxCompute Catalog能夠從MaxCompute服務(wù)讀取物理表的Schema,因此無需在Flink中聲明對應(yīng)Schema即可直接讀取數(shù)據(jù)。例如:
SELECT * FROM `<catalogName>`.`<projectName>`.`<tableName>`;
不聲明任何參數(shù)的默認(rèn)行為為全量讀取所有分區(qū),若您需要讀取特定分區(qū),或使用增量源表模式,可以參考大數(shù)據(jù)計(jì)算服務(wù)MaxCompute中的參數(shù)設(shè)置,在SQL注釋中聲明,例如:
讀取特定分區(qū):
SELECT * FROM `<catalogName>`.`<projectName>`.`<tableName>`
/*+ OPTIONS('partition' = 'ds=230613') */;
使用增量源表模式:
SELECT * FROM `<catalogName>`.`<projectName>`.`<tableName>`
/*+ OPTIONS('startPartition' = 'ds=230613') */;
使用維表模式:
SELECT * FROM `<anotherTable>` AS l LEFT JOIN
`<catalogName>`.`<projectName>`.`<tableName>`
/*+ OPTIONS('partition' = 'max_pt()', 'cache' = 'ALL') */
FOR SYSTEM_TIME AS OF l.proc_time AS r
ON l.id = r.id;
其他大數(shù)據(jù)計(jì)算服務(wù)MaxCompute中支持的源表和維表參數(shù)均可以通過該方式進(jìn)行設(shè)置。但需要注意的是,MaxCompute Catalog中不保存Watermark信息,若需要在以源表讀取數(shù)據(jù)時(shí)指定Watermark,可以使用CREATE TABLE ... LIKE ...
語句,例如:
CREATE TABLE `<newTable>` ( WATERMARK FOR ts AS ts )
LIKE `<catalogName>`.`<projectName>`.`<tableName>`;
其中ts為MaxCompute物理表中類型為DATETIME的列,該類型可以在Flink中被設(shè)置為事件時(shí)間并添加Watermark信息,創(chuàng)建完成后,從newTable讀取的數(shù)據(jù)均帶有Watermark。
向MaxCompute Catalog表中寫入數(shù)據(jù)
MaxCompute Catalog支持以固定分區(qū)或動(dòng)態(tài)分區(qū)模式寫入數(shù)據(jù),參見結(jié)果表示例。例如有MaxCompute物理表有二級分區(qū)ds和hh,可以使用如下語句寫入數(shù)據(jù):
-- 寫入固定分區(qū)
INSERT INTO `<catalogName>`.`<projectName>`.`<tableName>`
/*+ OPTIONS('partition' = 'ds=20231024,hh=09') */
SELECT <otherColumns>, '20231024', '09' FROM `<anotherTable>`;
-- 寫入動(dòng)態(tài)分區(qū)
INSERT INTO `<catalogName>`.`<projectName>`.`<tableName>`
/*+ OPTIONS('partition' = 'ds,hh') */
SELECT <otherColumns>, ds, hh FROM `<anotherTable>`;
SELECT中,分區(qū)列需要按分區(qū)層級順序放置在其他普通列之后。
刪除MaxCompute Catalog
刪除MaxCompute Catalog不會影響已運(yùn)行的作業(yè),但會導(dǎo)致使用該Catalog下表的作業(yè),在上線或重啟時(shí)報(bào)無法找到該表的錯(cuò)誤,請您謹(jǐn)慎操作。
UI方式
進(jìn)入元數(shù)據(jù)管理頁面。
單擊目標(biāo)工作空間操作列下的控制臺。
單擊元數(shù)據(jù)管理。
在Catalog列表頁面,單擊目標(biāo)Catalog名稱對應(yīng)操作列下的刪除。
在彈出的對話框中,單擊刪除。
說明刪除完成后,在左側(cè)元數(shù)據(jù)區(qū)域下即可查看目標(biāo)Catalog已刪除。
SQL命令方式
在查詢腳本文本編輯區(qū)域,輸入以下命令。
DROP CATALOG `<catalogName>`;
其中,<catalogName>為您要?jiǎng)h除的目標(biāo)MaxCompute Catalog名稱。
警告刪除MaxCompute Catalog不會影響已運(yùn)行的作業(yè),但對未上線或者需要暫停恢復(fù)的作業(yè)均產(chǎn)生影響,請您謹(jǐn)慎操作。
選中刪除Catalog的命令,鼠標(biāo)右鍵選擇運(yùn)行。
在左側(cè)元數(shù)據(jù)區(qū)域,查看目標(biāo)Catalog是否已刪除。
MaxCompute與Flink的類型映射
MaxCompute支持的類型參見2.0數(shù)據(jù)類型版本。
MaxCompute至Flink
讀取已有MaxCompute物理表時(shí),字段的MaxCompute類型將按下表映射為Flink類型。
MaxCompute類型 | Flink類型 |
BOOLEAN | BOOLEAN |
TINYINT | TINYINT |
SMALLINT | SMALLINT |
INT | INTEGER |
BIGINT | BIGINT |
FLOAT | FLOAT |
DOUBLE | DOUBLE |
DECIMAL(precision, scale) | DECIMAL(precision, scale) |
CHAR(n) | CHAR(n) |
VARCHAR(n) | VARCHAR(n) |
STRING | STRING |
BINARY | BYTES |
DATE | DATE |
DATETIME | TIMESTAMP(3) |
TIMESTAMP | TIMESTAMP(9) |
ARRAY | ARRAY |
MAP | MAP |
STRUCT | ROW |
JSON | STRING |
Flink至MaxCompute
通過Flink DDL在Catalog創(chuàng)建MaxCompute表時(shí),F(xiàn)link DDL中的字段類型將按下表映射為MaxCompute類型。
Flink類型 | MaxCompute類型 |
BOOLEAN | BOOLEAN |
TINYINT | TINYINT |
SMALLINT | SMALLINT |
INTEGER | INT |
BIGINT | BIGINT |
FLOAT | FLOAT |
DOUBLE | DOUBLE |
DECIMAL(precision, scale) | DECIMAL(precision, scale) |
CHAR(n) | CHAR(n) |
VARCHAR / STRING | STRING |
BINARY | BINARY |
VARBINARY / BYTES | BINARY |
DATE | DATE |
TIMESTAMP(n<=3) | DATETIME |
TIMESTAMP(3<n<=9) | TIMESTAMP |
ARRAY | ARRAY |
MAP | MAP |
ROW | STRUCT |