type
status
date
slug
summary
tags
category
icon
password

簡介

在 MergeTree 中會依照表上的 partition by 指定的分區鍵將 INSERT 的資料塞入到對應的分區中,不同分區的資料會分散在不同的實體目錄,在訪問數據時可以幫助 ClickHouse 盡可能少的掃描數據。
大多數的情況下不需要分區鍵,即使需要通常也不需要比月份更精細的分區鍵,過於精細的分區反而會降低效率,例如:不建議將 id 設為分區鍵,而是應該透過 order by 設為稀疏索引。
 

範例

建立一張包含分區設定的表:
因為表才建立還沒有塞入數據,因此看不到任何分區目錄:
向表中插入新數據時,同一批次的新數據會被儲存在單獨的分區目錄:
隨後經過約 10~15 分鐘後 (或者是使用 OPTIMIZE TABLE) 同一分區的資料會合併到一個新的分區目錄,並且舊的分區目錄其 active 會被設為 0 不再使用:
隨後經過約 10 分鐘後,active = 0 的分區目錄會被刪除:

分區目錄的命名規則

notion image
  • PartitionID:分區ID,為依照分區鍵計算的結果。
  • MinBlockNum、MaxBlockNum:
    • BlockNum 是一個以表為單位的自增值,每當新建一個分區目錄時 BlockNum 就會增長。
      因此 Min、Max 的 BlockNum 就表示該分區目錄所包含的最小和最大 BlockNum。
      對於一個新建的分區目錄 Min、Max BlockNum 會是相等的:
      分區合併時才會發生分區目錄的 Min、Max BlockNum 不相同:
  • Level:分區合併的次數,對於每一個 PartitionID 所屬的分區目錄其起始值為 0。

分區目錄的合併過程

notion image
notion image

參考