您現在的位置是:首頁 > 武術

資料定義(三)

  • 由 MY隨性隨心 發表于 武術
  • 2021-12-25
簡介在寫入列舉資料的時候,只會用到Key字串部分雖然列舉定義中的Key屬於String型別,但是在後續對列舉的所有操作中(包括排序、分組、去重、過濾等),會使用Int型別的Value值巢狀型別本質是一種多維陣列的結構

定點數是什麼意思

1 ClickHouse的資料型別

分為基礎型別、複合型別和特殊型別

【基礎型別】

ClickHouse則直接使用Int8、Int16、Int32和Int64指代4種大小的Int型別

ClickHouse的浮點數支援正無窮、負無窮以及非數字的表達方式

如果要求更高精度的數值運算,則需要使用定點數。ClickHouse提供了Decimal32、Decimal64和Decimal128三種精度的定點數

字串由String定義

,長度不限。因此在使用String的時候無須宣告大小

FixedString表示固定長度的字串,FixedString使用null位元組填充末尾字元

ClickHouse有UUID資料型別

時間型別分為DateTime、DateTime64和Date三類。ClickHouse目前沒有時間戳型別

【複合型別】

ClickHouse還提供了陣列、元組、列舉和巢狀四類複合型別

不需要主動宣告陣列的元素型別。因為ClickHouse的陣列擁有型別推斷的能力

,推斷依據:以最小儲存代價為原則,即使用最小可表達的資料型別

同一個陣列內可以包含多種資料型別,例如陣列[1,2。0]是可行的。但各型別之間必須相容

元組型別由1~n個元素組成,每個元素之間允許設定不同的資料型別,且彼此之間不要求相容

ClickHouse支援列舉型別,這是一種在定義常量時經常會使用的資料型別

列舉固定使用(String:Int)Key/Value鍵值對的形式定義資料;key和Value是不允許重複的,要保證唯一性。Key和Value的值都不能為Null,但Key允許是空字串。在寫入列舉資料的時候,只會用到Key字串部分

雖然列舉定義中的Key屬於String型別,但是在後續

對列舉的所有操作中(包括排序、分組、去重、過濾等),會使用Int型別的Value值

巢狀型別本質是一種多維陣列的結構。巢狀表中的每個欄位都是一個數組,並且行與行之間陣列的長度無須對

【特殊型別】

Nullable 表示可以寫入null

Nullable只能和基礎型別搭配使用

,不能用於陣列和元組這些複合型別,也

不能作為索引欄位

;其次,應該慎用Nullable型別,包括Nullable的資料表,不然會使查詢和寫入效能變慢。因為在正常情況下,每個列欄位的資料會被儲存在對應的[Column]。bin檔案中。如果一個列欄位被Nullable型別修飾後,會額外生成一個[Column]。null。bin檔案專門儲存它的Null值。這意味著在讀取和寫入資料時,需要一倍的額外檔案操作。

2 參考

朱凱《ClickHouse原理解析與應用實踐》

Top