clickhouse自定義分割槽及底層儲存合併機制

2021-10-22 15:20:29 字數 2565 閱讀 1742

在將新資料插入表中時,每個分割槽的資料儲存為單獨的資料片段(每個資料片段的資料是按逐漸排序的),在插入後的10~15分鐘內,同乙個分割槽的資料片段將合併為乙個整體的資料片段。

根據分割槽表示式的資料型別,分割槽的命名規則是存在差異的。

系統表:

select

partition

,name,

table

,active from system.parts where

table

like

'***'

;

#1. 不指定分割槽

drop

table test_partition_non;

create

table test_partition_non(name string,

timestamp

datetime

)engine

=mergetree(

)order

by name;

insert

into test_partition_non values

('nanjing'

,'2020-04-21 12:23:33');

#2. 數值

drop

table test_partition_numeric;

create

table test_partition_numeric(id uint64,

timestamp

datetime

)engine

=mergetree(

)order

by id partition

by id;

insert

into test_partition_numeric values

(556

,'2020-04-21 12:23:33');

#3. 日期

drop

table test_partition_date;

create

table test_partition_date(

date

date

,timestamp

datetime

)engine

=mergetree(

)order

bydate

partition

bydate

;insert

into test_partition_date values

('2020-04-21'

,'2020-04-21 12:23:33');

#4. 字串

drop

table test_partition_string;

create

table test_partition_string(name string,

timestamp

datetime

)engine

=mergetree(

)order

by name partition

by name;

insert

into test_partition_string values

('hangzhou'

,'2020-04-21 12:23:33');

#檢視表:

select

partition

, name,

table

, active from system.parts where

table

like

'test_partition_%'

;

在將新資料插入表中時,每個分割槽的資料按照目錄儲存為單獨的資料片段,目錄名為資料片段抿成,這個和system.parts表的name欄位一致。

在插入後的10~15分鐘內,同乙個分割槽的資料片段將合併為乙個整體的資料片段。

資料片段名稱包含了4部分的資訊,下面以資料片段20200421_1_2_1為例進行拆解:

非啟用的片段(active=0片段)將在合併後約10分鐘被刪除。

detached目錄包含使用detached語句從表分離的資料片段。損壞的資料片段也將移至該目錄,而不是被刪除。clickhouse不會使用detached目錄中的資料片段。此目錄中的資料可以隨時新增、刪除、或修改,clickhouse只有在執行attach語句時才會感知該目錄

alter語句、optimize語句通常需要指定分割槽的表示式,分割槽表示式的值為system.parts的partition欄位,而不是分割槽的名稱,這裡需要注意。

因為字串和日期型別的分割槽,分割槽名稱和分割槽表示式的值是不一樣的。

分割槽表示式的值是2020-04-21,分割槽名稱為20200421

執行optimize操作optimize table test_ partition partition '2020-04 -21';

不能執行optimize table test_ partition partition '202004 21';

hadoop自定義分割槽

實現自定義分割槽比較簡單了,繼承partitioner,實現getpartition 方法就行了,分割槽是按照key進行的。以wordcount為例。輸入文字1 hello world hello 3.輸入文字2 hello world world 4 編寫程式,hello 和world各自為乙個分...

mapreduce自定義分組 自定義分割槽 二次排序

mapreduce中二次排序的思想中,我們常常需要對資料的分割槽分組進行自定義,以下就介紹一下自定義分割槽分組的簡單實現 1 自定義分割槽 public class demopartitionerextends partitioner return 4 要注意的是 設定了分割槽之後,reduce任務...

Hadoop自定義排序 分割槽

自定義分割槽 主函式分割槽與分組 該物件需要實現writablecomparable介面。public class myclass implements writablecomparable public void setyear int year public int gettemperature...