全部產品
Search
文件中心

Realtime Compute for Apache Flink:清理到期資料

更新時間:Aug 15, 2024

清理到期資料可以釋放儲存空間,最佳化資源利用並提升系統運行效率等。本文為您介紹如何清理Paimon表到期資料,包括調整快照檔案到期時間、設定分區的到期時間、以及清理廢棄檔案。

注意事項

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

調整快照檔案到期時間

重要

為了保證快照能準確地還原歷史狀態,快照檔案存在期間,其關聯的歷史資料檔案不得刪除。

隨著快照檔案不斷產生,歷史資料佔用的儲存空間也將逐漸增加。因此,我們需要清理不再使用的快照檔案,以釋放該快照檔案指向的歷史資料檔案,從而釋放儲存空間。

以下參數決定了快照檔案的到期時間。您可以通過ALTER TABLE語句修改這些參數,也可以在寫入作業中通過SQL Hints臨時修改這些參數,詳情請參見修改表結構

參數

說明

資料類型

預設值

snapshot.num-retained.min

至少保留幾個快照檔案。

Integer

10

snapshot.num-retained.max

至多保留幾個快照檔案。

Integer

2147483647

snapshot.time-retained

一個快照檔案最長保留多久。

Duration

1h

在當前快照檔案數量多於snapshot.num-retained.min的前提下,只要當前快照檔案數量多於snapshot.num-retained.max,或最早的快照檔案產出時間超過了snapshot.time-retained,就會觸發快照清理。

設定分區到期時間

如果您的業務只關心最近一段時間內的資料,您可以按時間對資料進行分區,並設定分區到期時間以自動刪除過於久遠的歷史分區,從而釋放儲存空間。

重要

只有包含分區到期事件的快照檔案也到期了,分區中的資料檔案才會被真正刪除。

分區到期行為由下表三個表參數共同決定。您可以通過ALTER TABLE語句修改這些參數,也可以在寫入作業中通過SQL Hints臨時修改這些參數,詳情請參見修改表結構

參數

說明

備忘

partition.expiration-time

分區的到期時間。

參數值為時間長度,例如12h7d等。

partition.timestamp-pattern

將分區值轉換為時間字串的格式串。

在該格式串中,分區列由貨幣符號($)加上列名表示。

partition.timestamp-formatter

將時間字串轉換為時間戳記的格式串。

  • 如果該參數沒有設定,預設嘗試yyyy-MM-dd HH:mm:ssyyyy-MM-dd兩個格式串。

  • 任何Java的DateTimeFormatter相容的格式串都可以使用。

當分區的存活時間長度超過分區的到期時間參數值時,該分區將被刪除。分區的存活時間長度等於當前系統時間減去分區值轉化後的時間戳記。分區值轉化成時間戳記的邏輯如下:

  1. 通過partition.timestamp-pattern參數指定的格式串,將一個分區值轉換為時間字串

  2. 通過partition.timestamp-formatter參數指定的格式串,將時間字串轉換為時間戳記

例如:

  • 假設分區列由dt一列組成,可以設定'partition.timestamp-pattern' = '$dt'將分區dt=20240308轉化為字串20240308,設定'partition.timestamp-formatter' = 'yyyyMMdd'將該字串轉換為時間戳記。

  • 假設分區列由yearmonthday三列組成,可以設定'partition.timestamp-pattern' = '$year-$month-$day',將分區year=2023,month=04,day=21轉化為字串2023-04-21。此時不需要設定partition.timestamp-formatter,因為該字串符合預設格式之一的yyyy-MM-dd

  • 假設分區列由yearmonthdayhour四列組成,可以設定'partition.timestamp-pattern' = '$year-$month-$day $hour:00:00',將分區year=2023,month=04,day=21,hour=17轉換為字串 2023-04-21 17:00:00。此時不需要設定partition.timestamp-formatter,因為該字串符合預設格式之一的yyyy-MM-dd HH:mm:ss

清理廢棄檔案

由於作業報錯重啟等原因,Paimon表目錄下可能會遺留一些未被提交的臨時檔案。這些廢棄檔案無法通過快照到期刪除,需要手動執行以下步驟進行清理。清理的操作步驟如下:

  1. Realtime Compute控制台上,建立查詢指令碼,詳情請參見查詢指令碼

  2. 在文本編輯地區,輸入以下SQL語句。

    CALL `<catalog-name>`.sys.remove_orphan_files('<database-name>.<table-name>');

    其中,<catalog-name>是Paimon Catalog的名稱,<database-name>是需要清理的 Paimon表所在的Database的名稱,<table-name>是需要清理的Paimon表的名稱。

    預設情況下,清理廢棄檔案只清理建立時間超過1天的廢棄檔案。您可以額外傳入時間參數,指定最晚建立時間。例如,下面程式碼範例展示了清理mycat.mydb.mytbl表中,建立時間不晚於2023-10-31 12:00:00的廢棄檔案。

    CALL `mycat`.sys.remove_orphan_files('mydb.mytbl', '2023-10-31 12:00:00');
  3. 選中SQL代碼後,單擊左側程式碼數上的運行

    清理完成後,下方的結果選項卡會顯示刪除檔案的總數。

相關文檔