clickhouse基礎原理


1.clickhouse支持常見的數據類型

string ,int,float等等

特殊:

1.string中的-inf是負無窮

inf是正無窮

nan是空值

FixedString(N),類似與mysql中的varchar,可以指定字符串的長度

2.枚舉類型,clickhouse不支持boolean類型,需要使用枚舉來做

包括 Enum8 和 Enum16 類型。Enum 保存 'string'= integer 的對應關系。

Enum8 用 'String'= Int8 對描述。

Enum16 用 'String'= Int16 對描述。

用法演示:

創建一個帶有一個枚舉 Enum8('hello' = 1, 'world' = 2) 類型的列:

CREATE TABLE t_enum

(

    x Enum8('hello' = 1, 'world' = 2)

)

ENGINE = TinyLog

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

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

 

INSERT INTO t_enum VALUES

 

Ok.

 

3 rows in set. Elapsed: 0.002 sec.

 

:) insert into t_enum values('a')

 

INSERT INTO t_enum VALUES

 

 

Exception on client:

Code: 49. DB::Exception: Unknown element 'a' for type Enum8('hello' = 1, 'world' = 2)

從表中查詢數據時,ClickHouse 從 Enum 中輸出字符串值。

SELECT * FROM t_enum

 

┌─x─────┐

│ hello │

│ world │

│ hello │

└───────┘

如果需要看到對應行的數值,則必須將 Enum 值轉換為整數類型。

SELECT CAST(x, 'Int8') FROM t_enum

 

┌─CAST(x, 'Int8')─┐

│               1 │

│               2 │

│               1 │

└─────────────────┘

3.數組,tuple,date,還有很多類型,可以去官網上看。

 

 

 

2.表引擎:

1.tinylog:

特點:

  1. 這個引擎存在磁盤中
  2. 不支持索引
  3. 沒有並發控制,但是支持並發(同時讀,同時寫,讀和寫),只能支持同時讀的並發

應用場景:小表,這個表一般只用於查詢,例如國家,省份等

使用方式:創建表的時候指定引擎即可

 

2.memory

特點:

1.內存引擎,速度快,可以達到每秒10g,官網建議上限1億條數據

2.不支持索引

使用方式:用於測試

 

3.merge

特點:

1.本身不存儲數據,通過合並其他表的數據來得到自身的數據

 

4.mergetree(重點)

會自動的合並多個分支,減少了數據的存儲

特點:

  1. 按照主鍵進行排序
  2. 可以指定分區
  3. 可以支持數據副本,保證數據安全性
  4. 支持數據采樣

 

 

索引粒度:每個索引有多少行,默認值是8192

數據片段頭在zk中的存儲方式

使用直接io來操作磁盤合並時所需要的最小數據量,數據小於10g采用緩存io,大於10g采用磁盤io

linux中的io方式:直接io,緩存io

 

5.replacingmergetree

這個引擎是在mergertree的基礎上,添加了刪除重復數據的功能,該引擎和mergetree的不同之處在於它會刪除

具有相同主鍵的重復項.

ver:版本列

 會自動進行數據的合並,但是只會保存最大的版本

 

6.summingmergertree

會把所有具有相同主鍵的數據指定的列合並為一行,會取最先出現的值。

 

7.distributed

分布式引擎,本身不存儲數據,但是可以在多個服務器上進行分布式查詢,可以並行讀。

把不同的數據存到不同的機器上。

 

 

 

 

 

 

 

 


免責聲明!

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



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