【ClickHouse】0:clickhouse學習2之數據類型


 

一 :如何查看clickhouse具體支持哪些數據類型?

1:查看官方文檔:https://clickhouse.tech/docs/en/sql-reference/data-types/

2:查看系統表:select * from system.data_type_families;

SELECT *
FROM system.data_type_families

┌─name────────────────────────────┬─case_insensitive─┬─alias_to────┐
│ Ring                            │                0 │             │
│ Polygon                         │                0 │             │
│ IPv6                            │                0 │             │
│ IPv4                            │                0 │             │
│ IntervalYear                    │                0 │             │
│ IntervalQuarter                 │                0 │             │
│ IntervalMonth                   │                0 │             │
│ IntervalDay                     │                0 │             │
│ IntervalHour                    │                0 │             │
│ IntervalSecond                  │                0 │             │
│ AggregateFunction               │                0 │             │
│ Nothing                         │                0 │             │
│ Tuple                           │                0 │             │
│ Array                           │                0 │             │
│ Nullable                        │                0 │             │
│ Int32                           │                0 │             │
│ Date                            │                1 │             │
│ Enum                            │                0 │             │
│ Enum8                           │                0 │             │
│ IntervalMinute                  │                0 │             │
│ FixedString                     │                0 │             │
│ LowCardinality                  │                0 │             │
│ String                          │                0 │             │
│ DateTime                        │                1 │             │
│ UUID                            │                0 │             │
│ Decimal64                       │                1 │             │
│ Decimal32                       │                1 │             │
│ Point                           │                0 │             │
│ Float64                         │                0 │             │
│ Int16                           │                0 │             │
│ DateTime64                      │                1 │             │
│ Decimal128                      │                1 │             │
│ Int8                            │                0 │             │
│ SimpleAggregateFunction         │                0 │             │
│ Nested                          │                0 │             │
│ Int64                           │                0 │             │
│ Decimal                         │                1 │             │
│ IntervalWeek                    │                0 │             │
│ UInt64                          │                0 │             │
│ Enum16                          │                0 │             │
│ UInt32                          │                0 │             │
│ UInt16                          │                0 │             │
│ Float32                         │                0 │             │
│ MultiPolygon                    │                0 │             │
│ UInt8                           │                0 │             │
│ INET6                           │                1 │ IPv6        │
│ INET4                           │                1 │ IPv4        │
│ BINARY                          │                1 │ FixedString │
│ NATIONAL CHAR VARYING           │                1 │ String      │
│ BINARY VARYING                  │                1 │ String      │
│ NCHAR LARGE OBJECT              │                1 │ String      │
│ NATIONAL CHARACTER VARYING      │                1 │ String      │
│ NATIONAL CHARACTER LARGE OBJECT │                1 │ String      │
│ NATIONAL CHARACTER              │                1 │ String      │
│ NATIONAL CHAR                   │                1 │ String      │
│ CHARACTER VARYING               │                1 │ String      │
│ CLOB                            │                1 │ String      │
│ MEDIUMTEXT                      │                1 │ String      │
│ NUMERIC                         │                1 │ Decimal     │
│ TINYTEXT                        │                1 │ String      │
│ TEXT                            │                1 │ String      │
│ TINYBLOB                        │                1 │ String      │
│ VARCHAR2                        │                1 │ String      │
│ DOUBLE PRECISION                │                1 │ Float64     │
│ CHARACTER LARGE OBJECT          │                1 │ String      │
│ LONGTEXT                        │                1 │ String      │
│ NVARCHAR                        │                1 │ String      │
│ INT1 UNSIGNED                   │                1 │ UInt8       │
│ VARCHAR                         │                1 │ String      │
│ INT                             │                1 │ Int32       │
│ SINGLE                          │                1 │ Float32     │
│ BYTEA                           │                1 │ String      │
│ CHAR VARYING                    │                1 │ String      │
│ MEDIUMBLOB                      │                1 │ String      │
│ NCHAR                           │                1 │ String      │
│ CHAR                            │                1 │ String      │
│ SMALLINT UNSIGNED               │                1 │ UInt16      │
│ TIMESTAMP                       │                1 │ DateTime    │
│ FIXED                           │                1 │ Decimal     │
│ LONGBLOB                        │                1 │ String      │
│ DEC                             │                1 │ Decimal     │
│ TINYINT UNSIGNED                │                1 │ UInt8       │
│ INTEGER UNSIGNED                │                1 │ UInt32      │
│ INT UNSIGNED                    │                1 │ UInt32      │
│ BLOB                            │                1 │ String      │
│ REAL                            │                1 │ Float32     │
│ BOOL                            │                1 │ Int8        │
│ SMALLINT                        │                1 │ Int16       │
│ INTEGER SIGNED                  │                1 │ Int32       │
│ NCHAR VARYING                   │                1 │ String      │
│ INT SIGNED                      │                1 │ Int32       │
│ BIGINT SIGNED                   │                1 │ Int64       │
│ BINARY LARGE OBJECT             │                1 │ String      │
│ SMALLINT SIGNED                 │                1 │ Int16       │
│ TINYINT SIGNED                  │                1 │ Int8        │
│ INTEGER                         │                1 │ Int32       │
│ INT1 SIGNED                     │                1 │ Int8        │
│ BIGINT UNSIGNED                 │                1 │ UInt64      │
│ FLOAT                           │                1 │ Float32     │
│ BOOLEAN                         │                1 │ Int8        │
│ DOUBLE                          │                1 │ Float64     │
│ INT1                            │                1 │ Int8        │
│ CHAR LARGE OBJECT               │                1 │ String      │
│ TINYINT                         │                1 │ Int8        │
│ BIGINT                          │                1 │ Int64       │
│ CHARACTER                       │                1 │ String      │
│ BYTE                            │                1 │ Int8        │
└─────────────────────────────────┴──────────────────┴─────────────┘

107 rows in set. Elapsed: 0.003 sec. 
View Code

 

 

二:clickhouse支持的常見的數據類型

2.1:int: 整型

Int Ranges (有符號的整型)

  • Int8 - [-128 : 127]
  • Int16 - [-32768 : 32767]
  • Int32 - [-2147483648 : 2147483647]
  • Int64 - [-9223372036854775808 : 9223372036854775807]

Uint Ranges (無符號的整型)

  • UInt8 - [0 : 255]
  • UInt16 - [0 : 65535]
  • UInt32 - [0 : 4294967295]
  • UInt64 - [0 : 18446744073709551615]

 

2.2:float: 浮點數

  • Float32 - float
  • Float64 - double

建議盡可能以整數形式存儲數據。
對浮點數進行計算可能引起四舍五入的誤差。
浮點計算結果可能是諸如正無窮大(inf)、負無窮大(-inf)和"非數字"(nan)。

SELECT 1 - 0.9 # 0.09999999999999998
SELECT 0.5 / 0 # inf
SELECT -0.5 / 0 # -inf
SELECT 0 / 0 # nan

  

2.3:Decimal(P,S): 有符號的定點數

(Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S))
有符號的定點數,可在加、減和乘法運算過程中保持精度。對於除法,最低有效數字會被丟棄(不舍入)。
  • P - 精度。有效范圍:[1:38],決定可以有多少個十進制數字(包括分數)。
  • S - 規模。有效范圍:[0:P],決定數字的小數部分中包含的小數位數。

對於不同的 P 參數值 Decimal 表示,以下例子都是同義的:
-P從[1:9]-對於Decimal32(S)
-P從[10:18]-對於Decimal64(小號)
-P從[19:38]-對於Decimal128(S)

十進制值范圍

  • Decimal32(S) - ( -1 * 10^(9 - S),1*10^(9-S) )
  • Decimal64(S) - ( -1 * 10^(18 - S),1*10^(18-S) )
  • Decimal128(S) - ( -1 * 10^(38 - S),1*10^(38-S) )

例如,Decimal32(4) 可以表示 -99999.9999 至 99999.9999 的數值,步長為0.0001。

2.3:布爾值

沒有單獨的類型來存儲布爾值。可以使用 UInt8 類型,取值限制為 0 或 1。

2.4:String:變長字符串

字符串可以任意長度的。它可以包含任意的字節集,包含空字節。

 

 

2.4:FixedString(N):變長字符串

固定長度 N 的字符串。N 必須是嚴格的正自然數。

當數據的長度恰好為N個字節時,FixedString類型是高效的。 在其他情況下,這可能會降低效率。

當向ClickHouse中插入數據時,

  • 如果字符串包含的字節數少於`N’,將對字符串末尾進行空字節填充。
  • 如果字符串包含的字節數大於N,將拋出Too large value for FixedString(N)異常。

當做數據查詢時,ClickHouse不會刪除字符串末尾的空字節。 如果使用WHERE子句,則須要手動添加空字節以匹配FixedString的值。

以下示例闡明了如何將WHERE子句與FixedString一起使用。

考慮帶有FixedString(2)列的表:

┌─name──┐
│ b     │
└───────┘

  

查詢語句SELECT * FROM FixedStringTable WHERE a = 'b' 不會返回任何結果。請使用空字節來填充篩選條件。

SELECT * FROM FixedStringTable WHERE a = 'b\0'
┌─a─┐
│ b │
└───┘

  

這種方式與MySQL的CHAR類型的方式不同(MySQL中使用空格填充字符串,並在輸出時刪除空格)。

請注意,FixedString(N)的長度是個常量。僅由空字符組成的字符串,函數length返回值為N,而函數empty的返回值為1

 

 

2.5:UUID:通用唯一標識符

通用唯一標識符(UUID)是用於標識記錄的16字節數字。
如果在插入新記錄時未指定UUID列值,則UUID值將填充為零:00000000-0000-0000-0000-000000000000
要生成UUID值,ClickHouse提供generateUUIDv4()函數。

select generateUUIDv4() # 29fc209d-eba3-4adf-b7cb-d4600036d10a

UUID數據類型不支持算術運算(例如,abs)或聚合函數(例如sum和avg)。
UUID數據類型僅支持String數據類型也支持的函數(例如,min,max和count)。

 

 

2.6:Date:日期

日期類型,用兩個字節存儲,表示從 1970-01-01 (無符號) 到當前的日期值。

允許存儲從 Unix 紀元開始到編譯階段定義的上限閾值常量(目前上限是2106年,但最終完全支持的年份為2105)。最小值輸出為1970-01-01。

日期中沒有存儲時區信息。

 

2.7:Datetime:時間戳

時間戳類型。用四個字節(無符號的)存儲 Unix 時間戳。允許存儲與日期類型相同的范圍內的值。最小值為 1970-01-01 00:00:00。時間戳類型值精確到秒(沒有閏秒)。

 

時區:

使用啟動客戶端或服務器時的系統時區,時間戳是從文本(分解為組件)轉換為二進制並返回。在文本格式中,有關夏令時的信息會丟失。

默認情況下,客戶端連接到服務的時候會使用服務端時區。您可以通過啟用客戶端命令行選項 --use_client_time_zone 來設置使用客戶端時間。

因此,在處理文本日期時(例如,在保存文本轉儲時),請記住在夏令時更改期間可能存在歧義,如果時區發生更改,則可能存在匹配數據的問題。

 

2.8:Enum:枚舉

枚舉類型(Enum8, Enum16)

Enum 保存 'string'= integer 的對應關系。

在 ClickHouse 中,盡管用戶使用的是字符串常量,但所有含有 Enum 數據類型的操作都是按照包含整數的值來執行。這在性能方面比使用 String 數據類型更有效。
Enum8 用 'String'= Int8 對描述。
Enum16 用 'String'= Int16 對描述。

CREATE TABLE t_enum
(
    x Enum('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog


INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')

這個 x 列只能存儲類型定義中列出的值:'hello'或'world'。如果您嘗試保存任何其他值,ClickHouse 拋出異常。

 

2.9:Nullable:可為空/缺失值

允許用特殊標記 (NULL) 表示«缺失值»,可以與 TypeName 的正常值存放一起。例如,Nullable(Int8) 類型的列可以存儲 Int8 類型值,而沒有值的行將存儲 NULL

對於 TypeName,不能使用復合數據類型 陣列 和 元組。復合數據類型可以包含 Nullable 類型值,例如Array(Nullable(Int8))

Nullable 類型字段不能包含在表索引中。

除非在 ClickHouse 服務器配置中另有說明,否則 NULL 是任何 Nullable 類型的默認值。

要在表的列中存儲 Nullable 類型值,ClickHouse 除了使用帶有值的普通文件外,還使用帶有 NULL 掩碼的單獨文件。 掩碼文件中的條目允許 ClickHouse 區分每個表行的 NULL 和相應數據類型的默認值。 由於附加了新文件,Nullable 列與類似的普通文件相比消耗額外的存儲空間。所以使用 Nullable 幾乎總是對性能產生負面影響,在設計數據庫時請記住這一點!

 

 

2.10:Array(T):數組

由 T 類型元素組成的數組。
T 可以是任意類型,包含數組類型。 但不推薦使用多維數組,ClickHouse 對多維數組的支持有限。
可以使用array()函數和中括號來創建數組

SELECT array(1, 2) SELECT [1, 2] 

如果在元素中存在 NULL或存在 Nullable類型元素,那么數組的元素類型將會變成 Nullable。
如果 ClickHouse 無法確定數據類型,它將產生異常。

2.11:Tuple(T1,T2,...):元組

元組,其中每個元素都有單獨的類型。

SELECT tuple(1,'a')

2.12:Nested(Name1 Type1, Name2 Type2, ...):嵌套

嵌套數據結構類似於嵌套表。嵌套數據結構的參數(列名和類型)與 CREATE 查詢類似。每個表可以包含任意多行嵌套數據結構。
只支持一級嵌套。嵌套結構的列中,若列的類型是數組類型,那么該列其實和多維數組是相同的,所以目前嵌套層級的支持很局限(MergeTree 引擎中不支持存儲這樣的列)
大多數情況下,處理嵌套數據結構時,會指定一個單獨的列。為了這樣實現,列的名稱會與點號連接起來。這些列構成了一組匹配類型。在同一條嵌套數據中,所有的列都具有相同的長度。
不能對整個嵌套數據結構執行 SELECT。只能明確列出屬於它一部分列。

CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, ... Goals Nested ( ID UInt32, Serial UInt32, EventTime DateTime, Price Int64, OrderID String, CurrencyID UInt32 ), ... ) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign) 

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM