清理過(guò)期數(shù)據(jù)
清理過(guò)期數(shù)據(jù)可以釋放存儲(chǔ)空間,優(yōu)化資源利用并提升系統(tǒng)運(yùn)行效率等。本文為您介紹如何清理Paimon表過(guò)期數(shù)據(jù),包括調(diào)整快照文件過(guò)期時(shí)間、設(shè)置分區(qū)的過(guò)期時(shí)間、以及清理廢棄文件。
注意事項(xiàng)
僅實(shí)時(shí)計(jì)算引擎VVR 8.0.5及以上版本支持Paimon表。
調(diào)整快照文件過(guò)期時(shí)間
為了保證快照能準(zhǔn)確地還原歷史狀態(tài),快照文件存在期間,其關(guān)聯(lián)的歷史數(shù)據(jù)文件不得刪除。
隨著快照文件不斷產(chǎn)生,歷史數(shù)據(jù)占用的存儲(chǔ)空間也將逐漸增加。因此,我們需要清理不再使用的快照文件,以釋放該快照文件指向的歷史數(shù)據(jù)文件,從而釋放存儲(chǔ)空間。
以下參數(shù)決定了快照文件的過(guò)期時(shí)間。您可以通過(guò)ALTER TABLE語(yǔ)句修改這些參數(shù),也可以在寫(xiě)入作業(yè)中通過(guò)SQL Hints臨時(shí)修改這些參數(shù),詳情請(qǐng)參見(jiàn)修改表結(jié)構(gòu)。
參數(shù) | 說(shuō)明 | 數(shù)據(jù)類(lèi)型 | 默認(rèn)值 |
snapshot.num-retained.min | 至少保留幾個(gè)快照文件。 | Integer | 10 |
snapshot.num-retained.max | 至多保留幾個(gè)快照文件。 | Integer | 2147483647 |
snapshot.time-retained | 一個(gè)快照文件最長(zhǎng)保留多久。 | Duration | 1h |
在當(dāng)前快照文件數(shù)量多于snapshot.num-retained.min
的前提下,只要當(dāng)前快照文件數(shù)量多于snapshot.num-retained.max
,或最早的快照文件產(chǎn)出時(shí)間超過(guò)了snapshot.time-retained
,就會(huì)觸發(fā)快照清理。
設(shè)置分區(qū)過(guò)期時(shí)間
如果您的業(yè)務(wù)只關(guān)心最近一段時(shí)間內(nèi)的數(shù)據(jù),您可以按時(shí)間對(duì)數(shù)據(jù)進(jìn)行分區(qū),并設(shè)置分區(qū)過(guò)期時(shí)間以自動(dòng)刪除過(guò)于久遠(yuǎn)的歷史分區(qū),從而釋放存儲(chǔ)空間。
只有包含分區(qū)過(guò)期事件的快照文件也過(guò)期了,分區(qū)中的數(shù)據(jù)文件才會(huì)被真正刪除。
分區(qū)過(guò)期行為由下表三個(gè)表參數(shù)共同決定。您可以通過(guò)ALTER TABLE語(yǔ)句修改這些參數(shù),也可以在寫(xiě)入作業(yè)中通過(guò)SQL Hints臨時(shí)修改這些參數(shù),詳情請(qǐng)參見(jiàn)修改表結(jié)構(gòu)。
參數(shù) | 說(shuō)明 | 備注 |
| 分區(qū)的過(guò)期時(shí)間。 | 參數(shù)值為時(shí)間長(zhǎng)度,例如 |
| 將分區(qū)值轉(zhuǎn)換為時(shí)間字符串的格式串。 | 在該格式串中,分區(qū)列由美元符號(hào)($)加上列名表示。 |
| 將時(shí)間字符串轉(zhuǎn)換為時(shí)間戳的格式串。 |
|
當(dāng)分區(qū)的存活時(shí)長(zhǎng)超過(guò)分區(qū)的過(guò)期時(shí)間參數(shù)值時(shí),該分區(qū)將被刪除。分區(qū)的存活時(shí)長(zhǎng)等于當(dāng)前系統(tǒng)時(shí)間減去分區(qū)值轉(zhuǎn)化后的時(shí)間戳。分區(qū)值轉(zhuǎn)化成時(shí)間戳的邏輯如下:
通過(guò)
partition.timestamp-pattern
參數(shù)指定的格式串,將一個(gè)分區(qū)值轉(zhuǎn)換為時(shí)間字符串。通過(guò)
partition.timestamp-formatter
參數(shù)指定的格式串,將時(shí)間字符串轉(zhuǎn)換為時(shí)間戳。
例如:
假設(shè)分區(qū)列由
dt
一列組成,可以設(shè)置'partition.timestamp-pattern' = '$dt'
將分區(qū)dt=20240308
轉(zhuǎn)化為字符串20240308
,設(shè)置'partition.timestamp-formatter' = 'yyyyMMdd'
將該字符串轉(zhuǎn)換為時(shí)間戳。假設(shè)分區(qū)列由
year
、month
和day
三列組成,可以設(shè)置'partition.timestamp-pattern' = '$year-$month-$day'
,將分區(qū)year=2023,month=04,day=21
轉(zhuǎn)化為字符串2023-04-21
。此時(shí)不需要設(shè)置partition.timestamp-formatter
,因?yàn)樵撟址夏J(rèn)格式之一的yyyy-MM-dd
。假設(shè)分區(qū)列由
year
、month
、day
和hour
四列組成,可以設(shè)置'partition.timestamp-pattern' = '$year-$month-$day $hour:00:00'
,將分區(qū)year=2023,month=04,day=21,hour=17
轉(zhuǎn)換為字符串2023-04-21 17:00:00
。此時(shí)不需要設(shè)置partition.timestamp-formatter
,因?yàn)樵撟址夏J(rèn)格式之一的yyyy-MM-dd HH:mm:ss
。
清理廢棄文件
由于作業(yè)報(bào)錯(cuò)重啟等原因,Paimon表目錄下可能會(huì)遺留一些未被提交的臨時(shí)文件。這些廢棄文件無(wú)法通過(guò)快照過(guò)期刪除,需要手動(dòng)執(zhí)行以下步驟進(jìn)行清理。清理的操作步驟如下:
在實(shí)時(shí)計(jì)算控制臺(tái)上,新建查詢腳本,詳情請(qǐng)參見(jiàn)查詢腳本。
在文本編輯區(qū)域,輸入以下SQL語(yǔ)句。
CALL `<catalog-name>`.sys.remove_orphan_files('<database-name>.<table-name>');
其中,
<catalog-name>
是Paimon Catalog的名稱(chēng),<database-name>
是需要清理的 Paimon表所在的Database的名稱(chēng),<table-name>
是需要清理的Paimon表的名稱(chēng)。默認(rèn)情況下,清理廢棄文件只清理創(chuàng)建時(shí)間超過(guò)1天的廢棄文件。您可以額外傳入時(shí)間參數(shù),指定最晚創(chuàng)建時(shí)間。例如,下面代碼示例展示了清理mycat.mydb.mytbl表中,創(chuàng)建時(shí)間不晚于2023-10-31 12:00:00的廢棄文件。
CALL `mycat`.sys.remove_orphan_files('mydb.mytbl', '2023-10-31 12:00:00');
選中SQL代碼后,單擊左側(cè)代碼行數(shù)上的運(yùn)行。
清理完成后,下方的結(jié)果選項(xiàng)卡會(huì)顯示刪除文件的總數(shù)。
相關(guān)文檔
如果您需要了解Paimon主鍵表的常用優(yōu)化,詳情請(qǐng)請(qǐng)見(jiàn)Paimon性能優(yōu)化。
Paimon表的消費(fèi)依賴快照文件,快照過(guò)期時(shí)間太短或消費(fèi)作業(yè)效率低會(huì)導(dǎo)致正在消費(fèi)的快照文件因過(guò)期被刪除,消費(fèi)作業(yè)出現(xiàn)
File xxx not found, Possible causes
報(bào)錯(cuò),解決方法請(qǐng)參見(jiàn)讀Paimon作業(yè)出現(xiàn)File xxx not found, Possible causes。