本文介紹基於Flink建立Paimon DLF Catalog,讀取MySQL CDC業務資料寫入DLF,進而使用MaxCompute的外部項目進行資料湖聯邦查詢分析,再將結果寫回到DLF。本文使用新版本DLF,區別於舊版DLF1.0。新版本DLF更多資訊參見資料湖構建。
前提條件
操作步驟
步驟一:來源資料準備
如有其他MySQL測試資料,可跳過此步驟。
此步驟類比業務系統即時更新的資料,通過Flink以Paimon的格式寫入湖上。
登入RDS 控制台。
在左側導覽列,選擇執行個體列表,在左上方選擇地區。
在執行個體列表頁面,單擊目標執行個體ID/名稱,進入執行個體詳情頁。
在左側導覽列,單擊資料庫管理。
單擊建立資料庫。配置如下參數:
參數
是否必填
說明
樣本
資料庫(DB)名稱
必填
長度為2~64個字元。
以字母開頭,以字母或數字結尾。
由小寫字母、數字、底線或中劃線組成。
資料庫名稱在執行個體內必須是唯一的。
資料庫名稱中如果包含
-,建立出的資料庫的檔案夾的名字中的-會變成@002d。
dlf25_paimon支援字元集
必填
請按需選擇字元集。
utf8授權帳號
選填
選中需要訪問本資料庫的帳號。本參數可以留空,建立資料庫後再綁定帳號。
此處僅會顯示普通帳號。高許可權帳號擁有所有資料庫的所有許可權,無需授權。
預設備忘說明
選填
用於備忘該資料庫的相關資訊,便於後續資料庫管理,最多支援256個字元。
建立外部項目DLF2.5測試庫。單擊登入資料庫,在左側導覽列選擇資料庫執行個體,雙擊選中已建立的資料庫,在右側SQLConsole頁面執行下列語句,建立測試表並寫入測試資料。
如果執行個體存在,但執行個體展開後未找到目標資料庫,可能是:
登入帳號無目標資料庫的存取權限:可前往RDS執行個體詳情頁的帳號管理頁面手動修改帳號許可權或更換登入的資料庫帳號
中繼資料未同步導致目錄無法顯示:請將滑鼠懸浮在目標資料庫所屬執行個體上,單擊執行個體名右側的
按鈕,即可重新整理資料庫列表,顯示目標資料庫。
CREATE TABLE emp ( empno INT PRIMARY KEY, ename VARCHAR(20), job VARCHAR(20), mgr INT, hiredate DATE, sal DECIMAL(10,2), comm DECIMAL(10,2), deptno INT ); INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,'2020-12-17', 800.00,NULL,20), (7499,'ALLEN','SALESMAN',7698,'2021-02-20',1600.00,300.00,30), (7521,'WARD','SALESMAN',7698,'2021-02-22',1250.00,500.00,30), (7566,'JONES','MANAGER',7839,'2021-04-02',2975.00,NULL,20), (7654,'MARTIN','SALESMAN',7698,'2021-09-28',1250.00,1400.00,30), (7698,'BLAKE','MANAGER',7839,'2021-05-01',2850.00,NULL,30), (7782,'CLARK','MANAGER',7839,'2021-06-09',2450.00,NULL,10), (7788,'SCOTT','ANALYST',7566,'2021-12-09',3000.00,NULL,20), (7839,'KING','PRESIDENT',NULL,'2021-11-17',5000.00,NULL,10), (7844,'TURNER','SALESMAN',7698,'2021-09-08',1500.00,0.00,30), (7876,'ADAMS','CLERK',7788,'2022-01-12',1100.00,NULL,20), (7900,'JAMES','CLERK',7698,'2021-12-03', 950.00,NULL,30), (7902,'FORD','ANALYST',7566,'2021-12-03',3000.00,NULL,20), (7934,'MILLER','CLERK',7782,'2022-01-23',1300.00,NULL,10), (8001,'DUKE','ENGINEER',7788,'2023-03-15',3500.00,NULL,20), (8002,'DANIEL','ENGINEER',7788,'2023-04-01',3400.00,NULL,20), (8003,'SANDRA','CONSULTANT',7698,'2023-05-10',2700.00,NULL,30), (8004,'KAREN','CLERK',7902,'2023-06-11',1200.00,NULL,20), (8005,'JOHN','MANAGER',7839,'2023-07-12',4000.00,NULL,10), (8006,'LISA','DESIGNER',7698,'2023-08-13',2200.00,NULL,30);查詢測試表資料。
SELECT * FROM emp;返回結果:

步驟二:準備DLF中繼資料庫
登入資料湖構建(DLF)控制台,在左上方選擇地區。
在左側導覽列選擇数据目录。
在右側Catalogs頁面,單擊建立Catalog。
進入資料湖構建頁面,填寫如下參數,然後單擊建立 Catalog:
參數
是否必填
說明
Catalog 名稱
必填
自訂Catalog名稱,以字母開頭,1-256位,a-z、A-Z、0-9_。例如
db_dlf25_oss。描述
選填
自訂描述。
儲存類型
必填
標準儲存。
儲存冗餘類型
必填
本地冗餘:本地冗餘為資料存放區在單 AZ (可用性區域);當本地備援儲存體該 AZ(可用性區域)不可用時,會導致相關資料不可訪問,推薦使用同城冗餘;
同城冗餘:為同 Region 內多 AZ(可用性區域)冗餘機制,當某單個 AZ 不可用時,依然能保證資料可用;Catalog 建立後同城冗餘不可變更為本地冗餘,同城冗餘相對本地冗餘資料有更好的可用性,價格也更高,資料有更高可行性要求的推薦使用同城冗餘。
步驟三:基於Flink建立Paimon、MySQL catalog
建立Paimon Catalog
登入Flink控制台,在左上方選擇地區。
單擊目標工作空間名稱,然後在左側導覽列,選擇資料管理。
在右側Catalog列表 介面,單擊建立Catalog 。在彈出的建立 Catalog 對話方塊裡,選擇Apache Paimon,單擊下一步 並配置如下參數:
參數
是否必填
說明
metastore
必填
中繼資料存放區類型。本樣本中選擇
dlf。catalog name
必填
選擇需要關聯版本的DLF Catalog,選擇V2.5版本DLF。在DLF中建立的
db_dlf25_oss
建立MySQL catalog
登入Flink控制台,在左上方選擇地區。
添加白名單
單擊目標工作空間對應的操作列詳情。
在彈出的工作空間詳情互動面板中,複製交換器的網段資訊。
登入RDS 控制台。
在左側導覽列,選擇執行個體列表,在左上方選擇地區。
在執行個體列表頁面,單擊目標執行個體ID/名稱,進入執行個體詳情頁。
在左側導覽列,單擊白名單與安全性群組。
在白名單設定頁簽,單擊修改。
在彈出的修改白名單分組對話方塊,組內白名單位置添加複製下來的網段資訊,單擊確定。
登入Flink控制台,在左上方選擇地區。
單擊目標工作空間名稱,然後在左側導覽列,選擇資料管理。
在右側Catalog列表 介面,單擊建立Catalog 。在彈出的建立 Catalog 對話方塊裡,選擇MySQL,單擊下一步 並配置如下參數:
參數
是否必填
說明
catalog name
必填
自訂MySQL Catalog名稱。例如
mysql-catalog-dlf25。hostname
必填
MySQL資料庫的IP地址或者Hostname。
可登入RDS MySQL控制台,在資料庫執行個體詳情頁,單擊資料庫連接查看資料庫內網地址、外網地址及內網連接埠。
在跨VPC或公網訪問時需要打通網路,詳情請參見網路連通性。
port
預設
串連到伺服器的連接埠,預設為3306。
default database
必填
預設資料庫名稱。例如
dlf25_paimon。username
必填
串連MySQL資料庫伺服器時使用的使用者名稱。可登入RDS MySQL控制台,在資料庫執行個體詳情頁,單擊帳號管理查看。
password
必填
串連MySQL資料庫伺服器時使用的密碼。可登入RDS MySQL控制台,在資料庫執行個體詳情頁,單擊帳號管理查看。
步驟四:基於Flink讀MySQL資料寫入到DLF的Paimon表
登入Flink控制台,在左上方選擇地區。
單擊目標工作空間名稱,然後在左側導覽列,選擇。
在作業草稿頁簽,單擊
,建立檔案夾。右鍵檔案夾,選擇建立流作業,在彈出的新增作業草稿對話方塊,填寫檔案名稱並選擇引擎版本。
在檔案中寫入並執行如下SQL語句。注意根據實際命名修改代碼中的相關命名。
CREATE TABLE IF NOT EXISTS `db_dlf25_oss`.`default`.`emp` WITH ( 'bucket' = '4', 'changelog-producer' = 'input' ) AS TABLE `mysql-catalog-dlf25`.`dlf25_paimon`.`emp`;(可選)單擊右上方的深度檢查,確認作業Flink SQL語句中是否存在語法錯誤。
單擊右上方部署,在彈出的部署新版本對話方塊中填寫備忘、作業標籤和部署目標等資訊,然後單擊確定。
單擊目標工作空間名稱,然後在左側導覽列,選擇。
在作業營運頁面,單擊目標作業名稱,進入作業部署詳情頁面。
在目標作業部署詳情頁右上方,單擊啟動,選擇無狀態啟動後,單擊啟動。
查詢Paimon資料
在左側導覽列,選擇。
在查詢指令碼頁簽,單擊
,建立查詢指令碼。SELECT * FROM `db_dlf25_oss`.`default`.`emp`;返回結果如下:

登入資料湖構建(DLF)控制台,選擇,單擊資料目錄,進入資料庫,可查看同步過來的表詳情。

步驟五:MaxCompute建立Paimon_DLF外部資料源
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇 。
在外部数据源頁面,單擊创建外部数据源。
在彈出的新增外部数据源對話方塊,根據介面提示配置相關參數。參數說明如下:
參數
是否必填
說明
外部数据源类型
必填
選擇DLF+OSS。
外部数据源名称
必填
可自訂命名。命名規則如下:
以字母開頭,且只能包含小寫字母、底線和數字。
不能超過128個字元。
例如
mysql_paimon_dlf25。外部数据源描述
選填
根據需要填寫。
地域
必填
預設為當前地區。
DLF Endpoint
必填
預設為當前地區的DLF Endpoint。
OSS Endpoint
必填
預設為當前地區的OSS Endpoint。
RoleARN
必填
RAM角色的ARN資訊。此角色需要包含能夠同時訪問DLF和OSS服務的許可權。
登入RAM控制台。
在左側導覽列選擇。
在基礎資訊地區,可以擷取ARN資訊。
樣本:
acs:ram::124****:role/aliyunodpsdefaultrole。外部数据源补充属性
選填
特殊聲明的外部資料源補充屬性。指定後,使用此外部資料源的任務可以按照參數定義的行為訪問源系統。
說明支援的具體參數請關注後續官網文檔更新說明,具體參數將隨產品能力演化逐步放開。
單擊確認,完成外部資料源的建立。
在外部数据源頁面,單擊目標資料來源對應的操作的详情,可查看資料來源詳細資料。
步驟六:MaxCompute建立Paimon_DLF外部項目
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇。
在外部项目頁簽,單擊新建项目。
在彈出的新增项目對話方塊,根據介面提示文案設定項目資訊,單擊確認完成專案建立。
參數
是否必填
說明
项目类型
必填
預設為外部項目。
地域
必填
預設為當前地區,此處無法修改。
项目名称(全网唯一)
必填
字母開頭,包含字母、數字及底線(_),長度在3-28個字元。
MaxCompute外部数据源类型
選填
預設為Paimon_DLF。
MaxCompute外部数据源
選填
选择已有:會出現已經建立過的外部資料源。
新建外部数据源:即可建立並使用新的外部資料源。
MaxCompute外部数据源名称
必填
選擇已有:在下拉式清單中選擇已經建立好的外部資料源名稱。
建立外部資料源:則會使用建立的外部資料源名稱。
認證和鑒權
必填
任務執行者身份,如未建立服務關聯角色,需要先建立才可以使用此模式。
关联服务角色
必填
預設產生。
Endpoint
必填
預設產生。
数据目录
必填
DLF資料目錄。
计算资源付费类型
必填
包年包月或按量付费。
默认Quota
必填
選擇已有Quota.
描述
選填
自訂專案描述。
步驟七:資料分析
選擇串連工具登入外部項目。
列出外部項目中的schema。
-- 開啟session層級支援schema文法開關。 SET odps.namespace.schema=true; SHOW schemas; -- 返回結果。 ID = 20250919****am4qb default system OK在外部項目中列出schema下的表。
USE schema default; SHOW tables; -- 返回結果。 ID = 20250919****am4qb acs:ram::<uid>:root emp OK讀取DLF中的Paimon表。
SELECT * FROM emp; -- 返回結果。 +------------+------------+------------+------------+------------+------------+------------+------------+ | empno | ename | job | mgr | hiredate | sal | comm | deptno | +------------+------------+------------+------------+------------+------------+------------+------------+ | 7521 | WARD | SALESMAN | 7698 | 2021-02-22 | 1250 | 500 | 30 | | 7844 | TURNER | SALESMAN | 7698 | 2021-09-08 | 1500 | 0 | 30 | | 7876 | ADAMS | CLERK | 7788 | 2022-01-12 | 1100 | NULL | 20 | | 7900 | JAMES | CLERK | 7698 | 2021-12-03 | 950 | NULL | 30 | | 7934 | MILLER | CLERK | 7782 | 2022-01-23 | 1300 | NULL | 10 | | 8005 | JOHN | MANAGER | 7839 | 2023-07-12 | 4000 | NULL | 10 | | 7369 | SMITH | CLERK | 7902 | 2020-12-17 | 800 | NULL | 20 | | 7566 | JONES | MANAGER | 7839 | 2021-04-02 | 2975 | NULL | 20 | | 7654 | MARTIN | SALESMAN | 7698 | 2021-09-28 | 1250 | 1400 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 2021-05-01 | 2850 | NULL | 30 | | 7839 | KING | PRESIDENT | NULL | 2021-11-17 | 5000 | NULL | 10 | | 8002 | DANIEL | ENGINEER | 7788 | 2023-04-01 | 3400 | NULL | 20 | | 8006 | LISA | DESIGNER | 7698 | 2023-08-13 | 2200 | NULL | 30 | | 7499 | ALLEN | SALESMAN | 7698 | 2021-02-20 | 1600 | 300 | 30 | | 7782 | CLARK | MANAGER | 7839 | 2021-06-09 | 2450 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 2021-12-09 | 3000 | NULL | 20 | | 7902 | FORD | ANALYST | 7566 | 2021-12-03 | 3000 | NULL | 20 | | 8001 | DUKE | ENGINEER | 7788 | 2023-03-15 | 3500 | NULL | 20 | | 8003 | SANDRA | CONSULTANT | 7698 | 2023-05-10 | 2700 | NULL | 30 | | 8004 | KAREN | CLERK | 7902 | 2023-06-11 | 1200 | NULL | 20 | +------------+------------+------------+------------+------------+------------+------------+------------+查詢emp表中“每個部門薪水最高和最低的員工完整資訊”。
WITH ranked AS ( SELECT e.*, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rn_desc, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal ASC) AS rn_asc FROM emp e ) SELECT * FROM ranked WHERE rn_desc = 1 OR rn_asc = 1 ORDER BY deptno, sal DESC; -- 返回結果。 +-------+--------+-----------+------+------------+------+------+--------+------------+------------+ | empno | ename | job | mgr | hiredate | sal | comm | deptno | rn_desc | rn_asc | +-------+--------+-----------+------+------------+------+------+--------+------------+------------+ | 7839 | KING | PRESIDENT | NULL | 2021-11-17 | 5000 | NULL | 10 | 1 | 4 | | 7934 | MILLER | CLERK | 7782 | 2022-01-23 | 1300 | NULL | 10 | 4 | 1 | | 8001 | DUKE | ENGINEER | 7788 | 2023-03-15 | 3500 | NULL | 20 | 1 | 8 | | 7369 | SMITH | CLERK | 7902 | 2020-12-17 | 800 | NULL | 20 | 8 | 1 | | 7698 | BLAKE | MANAGER | 7839 | 2021-05-01 | 2850 | NULL | 30 | 1 | 8 | | 7900 | JAMES | CLERK | 7698 | 2021-12-03 | 950 | NULL | 30 | 8 | 1 | +-------+--------+-----------+------+------------+------+------+--------+------------+------------+
步驟八:將分析結果寫回DLF
在上一步驟中的外部項目中建立表,用來接收SQL分析結果。
CREATE TABLE emp_detail ( empno INT, ename VARCHAR(20), job VARCHAR(20), mgr INT, hiredate DATE, sal DECIMAL(10,2), comm DECIMAL(10,2), deptno INT );將步驟五的分析結果寫入到新表。
WITH ranked AS ( SELECT e.*, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rn_desc, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal ASC) AS rn_asc FROM emp e ) insert into emp_detail SELECT empno,ename,job,mgr, hiredate,sal,comm,deptno FROM ranked WHERE rn_desc = 1 OR rn_asc = 1 ORDER BY deptno, sal DESC;查詢新表。
SELECT * FROM emp_detail; -- 返回結果。 +------------+------------+------------+------------+------------+------------+------------+------------+ | empno | ename | job | mgr | hiredate | sal | comm | deptno | +------------+------------+------------+------------+------------+------------+------------+------------+ | 7839 | KING | PRESIDENT | NULL | 2021-11-17 | 5000 | NULL | 10 | | 7934 | MILLER | CLERK | 7782 | 2022-01-23 | 1300 | NULL | 10 | | 8001 | DUKE | ENGINEER | 7788 | 2023-03-15 | 3500 | NULL | 20 | | 7369 | SMITH | CLERK | 7902 | 2020-12-17 | 800 | NULL | 20 | | 7698 | BLAKE | MANAGER | 7839 | 2021-05-01 | 2850 | NULL | 30 | | 7900 | JAMES | CLERK | 7698 | 2021-12-03 | 950 | NULL | 30 | +------------+------------+------------+------------+------------+------------+------------+------------+登入資料湖構建(DLF)控制台,在左側導覽列選擇数据目录,可查看建立的表
emp_detail。