建立標籤(Tag)策略可以保留關鍵快照。建立Tag的快照,在進入到期清除流程時,快照的中繼資料與資料檔案仍會被持續儲存。在快照到期後,藉助標籤仍能追溯查詢到特定時間點的資料。在實踐中,每日產生一個標籤尤為實用,能夠確保對每一天歷史資料的持久訪問能力,為資料分析、審計追溯等應用情境提供了堅實支撐。本文為您介紹如何自動和手動建立與刪除Tag、回退到指定Tag、查詢Tag資料及進階配置。
使用限制
僅Realtime Compute引擎VVR 8.0.5及以上版本支援Paimon表。
自動建立與刪除Tag
Paimon支援在寫入資料的過程中,按照表參數的配置自動建立Tag以及刪除到期的Tag。您需要配置相關表參數。
參數 | 說明 | 備忘 |
| Tag建立模式,即基於何種行為觸發自動建立。 | 參數取值如下:
說明 如果未配置該參數,則不會自動建立Tag。 |
| 指定Tag建立時間間隔。 | 如果您指定的Tag建立模式為
|
| 指定延遲時間。 | 預設延遲時間為0。如果您的作業存在延遲,並且您希望觸發自動建立時,能夠等待延遲的資料提交後再建立,可以指定延遲時間。例如,如果您的作業延遲為10分鐘,則可以設定 |
| 指定最多保留的Tag數量。 | 由於Tag會保留某個快照的中繼資料和資料檔案,因此舊的Tag可能導致不需要使用的歷史資料檔案佔用儲存。當建立的Tag數量超出這個參數時,最早的Tag將會被刪除,相應的資料也會被清理。 |
例如,建立的Paimon表,Tag在每天00:10(00:00觸發建立,加上延遲時間10分鐘)自動建立,並且保留3個月的Tag(設定的最大保留數為90,3個月產生90個)。
CREATE TABLE mycat.mydb.mytbl (
k INT,
v INT,
PRIMARY KEY (k) NOT ENFORCED
) WITH (
'tag.automatic-creation' = 'process-time',
'tag.creation-period' = 'daily',
'tag.creation-delay' = '10 m',
'tag.num-retained-max' = '90'
);手動建立和刪除Tag
您可以在查詢指令碼中執行CALL語句手動建立或刪除Tag。
操作 | 命令 |
手動建立Tag | |
手動刪除Tag | |
回退到指定Tag
如果您的作業出現了錯誤,並且有較早時候建立的Tag,您可以回退到Tag,從而使資料回到正確的狀態。
這個操作會將Tag的時間之後的資料刪除,請謹慎使用,並在操作前備份資料檔案。
-- 使mycat.mydb.mytbl表回退到tag-1的狀態。
CALL `mycat`.sys.rollback_to('mydb.mytbl', 'tag-1');查詢Tag中繼資料和資料
查詢Tag中繼資料
您可以通過查詢Tags系統資料表查詢所有Tag的中繼資料資訊,更多Tags系統資料表的資訊,請參見Tags系統資料表。以
mycat.mydb.mytbl為例:SELECT * FROM mycat.mydb.`mytbl$tags`;查詢Tag資料
Tag可以用於批讀。您可以通過SQL Hints讀取特定Tag指向的資料,或者讀取兩個Tag間的增量資料。
讀取指定Tag的資料
-- 指定讀取名為 tag-1 的 tag SELECT * FROM mycat.mydb.mytbl /*+ OPTIONS('scan.tag-name' = 'tag-1') */;讀取兩個Tag間的增量資料
-- 指定讀取tag-1和tag-2間的增量資料。 SELECT * FROM mycat.mydb.mytbl /*+ OPTIONS('incremental-between' = 'tag-1,tag-2') */;
進階配置
設定自動建立的Tag名稱格式
您可以通過表參數tag.period-formatter來設定。支援的參數值如下:
with_dashes(預設值):Tag名稱中的日期帶有短劃線(-),即yyyy-MM-dd HH。without_dashes:Tag名稱中的日期不帶短劃線(-),即yyyyMMdd HH。
與快照(Savepoint)結合使用
在使用Flink時,通常會利用儲存點機制來長期儲存作業狀態,並用於作業的增量恢複。但是Paimon的快照會自動到期清理,在作業長時間運行後,儲存點對應的快照檔案可能會因為到期而被清理,導致從儲存點對應的快照恢複作業失敗。
而Paimon的Tag能長期保留某個快照的狀態,因此,您可以結合這兩個功能,在觸發儲存點的同時建立相應的Tag,方便在未來從某個儲存點恢複作業。
要使用這個特性,首先您需要通過ALTER TABLE語句或SQL Hints配置表參數sink.savepoint.auto-tag = true來開啟Tag自動建立。當您需要從儲存點恢複作業時,操作步驟如下。
找到該儲存點對應的Tag。
自動建立的Tag名稱的格式為
savepoint-${savepointID}。停止作業後,執行如下命令將資料回退到指定Tag。
CALL `<catalog-name>`.sys.rollback_to('<database-name>.<table-name>', 'savepoint-${savepointID}')從儲存點對應的快照恢複作業。
響應源表的Idle狀態
自動建立Tag功能依賴於Paimon的資料提交機制。當Paimon提交資料時,會建立快照,同時也會檢查目前時間點是否滿足建立Tag的條件。在一般情況下,當源表長時間處於Idle狀態,未發送資料時,Paimon會提交空資料,此時不會建立快照。如果在這個時間點正好需要建立Tag,就會導致相應的Tag沒有按時建立。
如果您配置了表參數'tag.automatic-creation' = 'process-time',這個問題不會產生。因為Paimon會在這種情況下強制建立快照,從而正常觸發Tag的建立。
但是,如果您配置了表參數'tag.automatic-creation' = 'watermark',此時Paimon無法判斷上遊是否長時間未發送資料。您需要額外配置表參數snapshot.watermark-idle-timeout來指定源表的最長Idle時間。如果源表在超過指定時間後仍未發送資料,則會強制建立快照,從而正常觸發Tag的建立。
相關文檔
調整快照檔案到期時間、設定分區的到期時間、以及清理廢棄檔案,詳情請參見清理到期資料。