全部產品
Search
文件中心

Realtime Compute for Apache Flink:Tag建立與管理

更新時間:Jul 13, 2024

建立標籤(Tag)策略可以保留關鍵快照。建立Tag的快照,在進入到期清除流程時,快照的中繼資料與資料檔案仍會被持續儲存。在快照到期後,藉助標籤仍能追溯查詢到特定時間點的資料。在實踐中,每日產生一個標籤尤為實用,能夠確保對每一天歷史資料的持久訪問能力,為資料分析、審計追溯等應用情境提供了堅實支撐。本文為您介紹如何自動和手動建立與刪除Tag、回退到指定Tag、查詢Tag資料及進階配置。

使用限制

僅Realtime Compute引擎VVR 8.0.5及以上版本支援Paimon表。

自動建立與刪除Tag

Paimon支援在寫入資料的過程中,按照表參數的配置自動建立Tag以及刪除到期的Tag。您需要配置相關表參數。

參數

說明

備忘

tag.automatic-creation

Tag建立模式,即基於何種行為觸發自動建立。

參數取值如下:

  • process-time:基於機器的系統時間間隔觸發Tag的建立。

  • Watermark:基於上遊的Watermark間隔觸發Tag的建立。

    您可以通過sink.watermark-time-zone參數指定Watermark的時區。

  • batch:在每次批作業完成後觸發tag建立。

說明

如果未配置該參數,則不會自動建立Tag。

tag.creation-period

指定Tag建立時間間隔。

如果您指定的Tag建立模式為process-time或者watermark,那麼同時您需要指定自動建立Tag的時間間隔。支援的時間間隔如下:

  • daily(預設值):建立Tag的間隔為一天。觸發時間為00:00。

  • hourly:建立Tag的間隔為一小時。觸發時間為整點。

  • two-hours:建立Tag的間隔為兩小時。觸發時間為整點。

tag.creation-delay

指定延遲時間。

預設延遲時間為0。如果您的作業存在延遲,並且您希望觸發自動建立時,能夠等待延遲的資料提交後再建立,可以指定延遲時間。例如,如果您的作業延遲為10分鐘,則可以設定'tag.creation-delay' = '10 m'。在到達需要建立Tag的時間點時,還會再等待10分鐘才建立Tag,保證延遲的資料被記錄到這次建立的Tag中。

tag.num-retained-max

指定最多保留的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

-- 在mycat.mydb.mytbl表中,基於編號為1的快照建立名為tag-1的Tag。
CALL `mycat`.sys.create_tag('mydb.mytbl', 'tag-1', 1);

-- 基於最新的快照建立名為tag-2的Tag。
CALL `mycat`.sys.create_tag('mydb.mytbl', 'tag-2');

手動刪除Tag

-- 在mycat.mydb.mytbl表中,刪除名為tag-1的Tag。
CALL `mycat`.sys.delete_tag('mydb.mytbl', 'tag-1');

回退到指定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自動建立。當您需要從儲存點恢複作業時,操作步驟如下。

  1. 找到該儲存點對應的Tag。

    自動建立的Tag名稱的格式為savepoint-${savepointID}

  2. 停止作業後,執行如下命令將資料回退到指定Tag。

    CALL `<catalog-name>`.sys.rollback_to('<database-name>.<table-name>', 'savepoint-${savepointID}')
  3. 從儲存點對應的快照恢複作業。

響應源表的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的建立。

相關文檔

調整快照檔案到期時間、設定分區的到期時間、以及清理廢棄檔案,詳情請參見清理到期資料