07_clickhouse、自定义分区及底层存储合并机制、自定义分区键、分区目录的命名规则、分区目录的合并过程、分区目录的合并过程、分区表达式指定、分区案例
4.自定義分區(qū)及底層存儲合并機制
4.1.自定義分區(qū)鍵
4.2.分區(qū)目錄的命名規(guī)則
4.3.分區(qū)目錄的合并過程
4.4.分區(qū)目錄的合并過程
4.5.分區(qū)表達式指定
4.6.分區(qū)案例
4.自定義分區(qū)及底層存儲合并機制
4.1.自定義分區(qū)鍵
1.分區(qū)是在建表時使用PARTITION BY expr子句指定。
2.分區(qū)鍵可以是表列中的任何表達式。
例如,按月指定分區(qū):PARTITION BY toYYYYMM(date_column)。
使用元組指定分區(qū):PARTITION BY (toMonday(StartDate),EventType)
3.在將新數(shù)據(jù)插入表中時,每個分區(qū)的數(shù)據(jù)存儲為單獨的數(shù)據(jù)片段(每個數(shù)據(jù)片段的數(shù) 據(jù)是按主鍵排序的),在插入后的10-15分鐘內(nèi),同一個分區(qū)的數(shù)據(jù)片段將合并為一個整 體的數(shù)據(jù)片段。
4.2.分區(qū)目錄的命名規(guī)則
根據(jù)分區(qū)表達式的數(shù)據(jù)類型,分區(qū)的命名規(guī)則是存在差異的。
1.不指定分區(qū):分區(qū)名稱為all
2.數(shù)值數(shù)據(jù)類型:分區(qū)名稱為數(shù)值。
3.日期數(shù)據(jù)類型:將日期轉(zhuǎn)換為數(shù)字作為分區(qū)名稱。
4.字符串數(shù)據(jù)類型:將日期轉(zhuǎn)換為hash作為分區(qū)名稱。
系統(tǒng)表:
xxxxx :) SELECT partition,name,table,active FROM system.parts WHERE table like '%demo%';SELECT partition,name,table,active FROM system.parts WHERE table LIKE '%demo%'┌─partition─┬─name─────────┬─table─────────────┬─active─┐ │ 201403 │ 201403_1_1_0 │ TabSeparated_demo │ 1 │ └───────────┴──────────────┴───────────────────┴────────┘1 rows in set. Elapsed: 0.009 sec. xxxxx :)4.3.分區(qū)目錄的合并過程
在將新數(shù)據(jù)插入表中時,每個分區(qū)的數(shù)據(jù)按照目錄存儲為單獨的數(shù)據(jù)片段,目錄名為數(shù)據(jù)片段名稱,這個和System.parts表的name字段一致。
在插入后的10-15分鐘內(nèi),同一個分區(qū)的數(shù)據(jù)片段將合并為一個整體的數(shù)據(jù)片段。
數(shù)據(jù)片段名稱包含了4部分的信息,下面以數(shù)據(jù)片段20200421_1_2_1為例進行拆解:
- 20200421是分區(qū)名稱。
- 1是數(shù)據(jù)塊的最小編號。
- 2 是數(shù)據(jù)塊的最大編號。
- 1 是塊級別,即該塊在MergeTree中的深度。
4.4.分區(qū)目錄的合并過程
1.active列為數(shù)據(jù)片段的狀態(tài)。1表示激活狀態(tài),0表示非激活狀態(tài)。當源數(shù)據(jù)片段合并為較大的片段之后,這些源的數(shù)據(jù)片段就變?yōu)榱朔羌せ顮顟B(tài)。損壞的數(shù)據(jù)片段也是非激活狀態(tài)。
2.同一分區(qū)有多個獨立的數(shù)據(jù)片段,這表明這些片段尚未合并。
ClickHouse會在插入后大約15分鐘后合并數(shù)據(jù)片段,也可以使用OPTIMIZE語句執(zhí)行計劃外的合并:
OPTIMIZE TABLE mergeTableDemo PARTITION 202004;
3.非激活的片段(active=0片段)將在合并后約10分鐘被刪除。
4.detached目錄包含使用DETACHED語句從表分離的數(shù)據(jù)片段。損壞的數(shù)據(jù)片段也將移至該目錄,而不是被刪除。ClickHouse不會使用detached目錄中的數(shù)據(jù)片段。此目錄中的數(shù)據(jù)可以隨時添加、刪除或修改,ClickHouse只能在運行ATTACH語句時才會感知該目錄。
4.5.分區(qū)表達式指定
alter語句、optimize語句通常需要指定分區(qū)的表達式,分區(qū)表達式的值為system.parts的partition字段, 而不是分區(qū)的名稱,這里需要注意。
因為字符串和日期類型的分區(qū),分區(qū)名稱和分區(qū)表達式的值是不一樣的。
例如:日期類型的分區(qū):
分區(qū)表達式的值是2020-04-21,分區(qū)名稱為20200421。
上面的值可以通過類似如下的方式查詢到:
select p.`partition` as `partition`,p.name as name,p.`table` as `table`,p.active as active from `system`.parts p where p.`table` = 'test_partition_date'執(zhí)行optimize操作:
optimize table test_partition partition '2020-04-21'。不能寫成:
optimize table test_partition partition '20200421。4.6.分區(qū)案例
1.不指定分區(qū)
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.分區(qū)是數(shù)值
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.分區(qū)是日期
drop table test_partition_date; create table test_partition_date(date Date, timestamp DateTime) ENGINE=MergeTree() order by date partition by date; insert into test_partition_date values ('2020-04-21', '2020-04-21 12:23:33');4.分區(qū)是字符串
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');查看分區(qū)信息,可以通過如下方式:
SELECT partition,name,table,active FROM system.parts WHERE table like ‘test_partition_%’; xxxxx :) SELECT partition, name, table, active FROM system.parts WHERE table like 'test_partition_%';SELECT partition,name,table,active FROM system.parts WHERE table LIKE 'test_partition_%'┌─partition─┬─name──────┬─table──────────────────┬─active─┐ │ tuple() │ all_1_1_0 │ test_partition_date │ 1 │ │ tuple() │ all_1_1_0 │ test_partition_non │ 1 │ │ 556 │ 556_1_1_0 │ test_partition_numeric │ 1 │ └───────────┴───────────┴────────────────────────┴────────┘3 rows in set. Elapsed: 0.010 sec. xxxxx :)總結(jié)
以上是生活随笔為你收集整理的07_clickhouse、自定义分区及底层存储合并机制、自定义分区键、分区目录的命名规则、分区目录的合并过程、分区目录的合并过程、分区表达式指定、分区案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 职高毕业一年后去参军,参军两年退役后还可
- 下一篇: 中国航空运动协会飞行员执照怎么年检?