clickhouse的TTL過期自動刪除方式

2022-09-21 16:18:07 字數 1947 閱讀 9796

什麼是ttl?

ttl的意思是time to live表示資料的存活時間。由於資料的價值會根據儲存的時間成反比,出於儲存成本的考慮通常只會保留近一年的資料。而在mergetree (合併樹)引擎中,可以通過設定ttl來輕鬆管理資料的存活時間,使資料的價值最大化。當然數倉的資料是不會刪除的,不過會部分業務不需要舊資料,比如使用者的畫像資料,使用者畫像是按天按小時更新甚至實時更新,比較舊畫像資料繼續儲存著沒價值則需要刪除。

在clickhouse 中,ttl可以設定值的生命週期,它既可以為整張表設定,也可以為每個列欄位單獨設定。表級別的 ttl 還會指定資料在磁碟和卷上自動轉移的邏輯。ttl 表示式的計算結果必須是 日期(date) 或 日期時間(datetime),如果同時設定了列級別的和表級別的ttl則以先到期的為準。

1.欄位級別ttl

當列字段中的值過期時, clickhouse會將它們替換成資料型別的預設值。如果分區內,某一列的所有值均已過期,clickhouse會從檔案系統中刪除此列。clickhouse的interval(資料時間間隔)支援的操作有:second(秒),minute(分鐘),hour(小時),day(日),week(周),month(月),quarter(季度),year(年)。

示例:

--

建立時指定 ttl

create

table

example_table(d

datetime,a

int ttl d + interval 1

day,

b int ttl d + interval 1

day,

c string

)engine

=mergetree

partition

bytoyyyymm(d)

order

byd;

--為表中已存在的列欄位新增 ttl

alter

table

example_table

modify

column `c` string ttl d + tointervalday(1)--

修改列字段的 ttl

alter

table

example_table

modify

column

c string ttl d

+ interval 1 week;

2.表級別ttl

表可以設定乙個用於移除過期行的表示式,以及多個用於在磁碟或卷上自動轉移資料片段的表示式。當表中的行過期時,clickhouse 會刪除所有對應的行。

示例:event_date超過乙個月的資料自動刪除

--

建立時指定 ttl

create

table

example_table

(`event_date` date,

`uid` int32,

`name` string

)engine

= replicatedaggregatingmergetree('

/clickhouse/tables//example_table

', '')

partition

byevent_date

order

byuid

ttl event_date

+ tointervalmonth(1

)settings index_granularity

=128;--

修改表的 ttl,event_date超過三個月的資料自動刪除

alter

table

example_table

modify ttl event_date

+ tointervalmonth(3);

ClickHouse引擎之 表和列的ttl

1.ttl即time to live 表示資料的存活時間。在mergetree中,可以為某個列欄位或者整張表設定ttl。2.當時間達到時,若列字段級別的ttl 則會刪除這一列的資料 3.若表級別的ttl則會刪除整張表的資料 3.若同時設定了列級別的和表級別的ttl則以先到期的為準。根據時間creat...

2022 01 21 通過TTL值判斷系統型別

通過ttl值判斷是什麼系統 ttl time to live,生存時間 是ip協議包中的乙個值,當我們使用ping命令進行網路連通測試或者是測試網速的時候,本地計算機會向目的主機傳送資料報,但是有的資料報會因為一些特殊的原因不能正常傳送到目的主機,如果沒有設定ttl值的話,資料報會一直在網路上面傳送...

clickhouse的單機部署

clickhouse 全稱是click stream data warehouse,簡稱clickhouse。是乙個完全的列式資料庫,可以做到流批一體。1.入門安裝與啟動 yum install y curl 安裝curl,可以請求url鏈結,請求外網 curl s sudo bash 2 yum ...