clickhouse的高級使用摸索

目錄

前言

OLAP場景的關鍵特徵

 缺陷

一、集羣模式搭建

1、centos系統安裝

2、配置文件

3、啓動

4、連接數據庫

二、字段知識

三、表知識

1、表引擎介紹

2、集羣模式表用法

四、綜合使用


前言

ClickHouse是一個用於聯機分析(OLAP)的列式數據庫管理系統(DBMS)。

OLAP場景的關鍵特徵

  • 大多數是讀請求
  • 數據總是以相當大的批(> 1000 rows)進行寫入
  • 不修改已添加的數據
  • 每次查詢都從數據庫中讀取大量的行,但是同時又僅需要少量的列
  • 寬表,即每個表包含着大量的列
  • 較少的查詢(通常每臺服務器每秒數百個查詢或更少)
  • 對於簡單查詢,允許延遲大約50毫秒
  • 列中的數據相對較小: 數字和短字符串(例如,每個URL 60個字節)
  • 處理單個查詢時需要高吞吐量(每個服務器每秒高達數十億行)
  • 事務不是必須的
  • 對數據一致性要求低
  • 每一個查詢除了一個大表外都很小
  • 查詢結果明顯小於源數據,換句話說,數據被過濾或聚合後能夠被盛放在單臺服務器的內存中

 缺陷

  • 1.無事務處理。
  • 2.缺乏全面的UPDATE / DELETE實現

參考:https://blog.csdn.net/asfjgvajfghaklsbf/article/details/85139888

 

一、集羣模式搭建

1、centos系統安裝

#集羣模式,每臺機器上都要執行
sudo yum install yum-utils
sudo rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client

官網教程:https://clickhouse.yandex/docs/zh/getting_started/

2、配置文件

每臺機器上都要執行

  • 配置文件目錄: /etc/clickhouse-server
  • 修改config.xml:在裏面添加一句:<include_from>/etc/clickhouse-server/metrika.xml</include_from>
  • 在該目錄下添加一個文件:metrika.xml  
<yandex>
	<clickhouse_remote_servers>
		<!-- 集羣名字 -->
		<clickhouse_cluster>
		    <!-- 數據分片1  -->
		    <shard>
			<!-- 寫入數據的權重 -->
			<weight>1</weight>
			<!-- 複製數據是否寫入全部副本false:全部 -->
			<internal_replication>true</internal_replication>
			<replica>
			    <host>hadoop001</host>
			    <port>9000</port>
			    <user>default</user>
			    <password>123456</password>
			</replica>
		    </shard>

		    <!-- 數據分片2  -->
		    <shard>
			<!-- 寫入數據的權重 -->
			<weight>1</weight>
			<!-- 複製數據是否寫入全部副本false:全部 -->
			<internal_replication>true</internal_replication>
			<replica>
			    <host>hadoop002</host>
			    <port>9000</port>
			    <user>default</user>
			    <password>123456</password>
			</replica>
		    </shard>

		    <!-- 數據分片3  -->
		    <shard>
			<!-- 寫入數據的權重 -->
			<weight>1</weight>
			<!-- 複製數據是否寫入全部副本 false:全部 -->
			<internal_replication>true</internal_replication>
			<replica>
			    <host>hadoop003</host>
			    <port>9000</port>
			    <user>default</user>
			    <password>123456</password>
			</replica>
		    </shard>

		</clickhouse_cluster>
	</clickhouse_remote_servers> 

        <zookeeper-servers>
                 <node index="1">
                        <host>hadoop001</host>
                        <port>2181</port>
                 </node>
                <node index="2">
                        <host>hadoop002</host>
                        <port>2181</port>
                </node>
                <node index="3">
                        <host>hadoop003</host>
                        <port>2181</port>
                </node>
        </zookeeper-servers>

</yandex>

3、啓動

每臺機器都要執行

啓動: 
sudo service clickhouse-server start


關閉: 
sudo service clickhouse-server stop

4、連接數據庫

1)終端下連接

clickhouse-client -h 127.0.0.1 --port 9000 -m -u default --password 123456

2)數據庫工具

推薦使用:DBeaver ,下載:https://dbeaver.io/download/

二、字段知識

參考官網:https://clickhouse.yandex/docs/zh/data_types/int_uint/

三、表知識

1、表引擎介紹

  • ReplacingMergeTree() :主鍵去重,主鍵相同的數據,會有一個後臺線程去重,不同的節點上相同的主鍵不會去重,去重的時間是不確定的,不能實時的去重;
  • MergeTree()主鍵不去重;
  • Distributed()分佈式引擎,不存儲數據,可以關聯對應的物理表(存儲數據的表),在集羣模式中使用這個表引擎;
  • AggregatingMergeTree() 聚合型表

2、集羣模式表用法

-- 創建物理表
CREATE TABLE IF NOT EXISTS operation.`store_cluster` ON CLUSTER clickhouse_cluster ( \ 
  `id` UInt32 COMMENT 'ID',\
  `storeID` Nullable(UInt16) COMMENT '門店ID',\
  `goodsID` Nullable(UInt32) COMMENT '商品ID',\
  `status` String  DEFAULT 'A'  COMMENT '關係狀態',\
  `createTime` Nullable(datetime)   COMMENT '創建時間',\
  `lastUpdate` Nullable(datetime )  COMMENT '最後更新時間',\
  `saleStatus` Nullable(String) COMMENT '門店銷售該商品的狀態',\
  `stockBorder` Nullable(Int16) COMMENT '門店商品邊界值'\
) ENGINE ReplacingMergeTree() PARTITION BY toDate(lastUpdate)  ORDER BY (id) SETTINGS index_granularity=8192 ;

-- operation爲數據庫
-- store_cluster爲物理表
-- clickhouse_cluster爲集羣的名字
-- ReplacingMergeTree爲表引擎
-- ORDER BY的字段,默認也是主鍵
-- 8192 分片大小


-- 創建邏輯表
CREATE TABLE store ON CLUSTER clickhouse_cluster  AS operation.`store_cluster` \
ENGINE = Distributed(clickhouse_cluster,  operation, `store_cluster`, rand());
-- store爲邏輯表,映射的是store_cluster這個物理表
--                             
-- Distributed的4個參數,分別是集羣名字、數據庫名、表名、分佈規則;

集羣模式下創建表,只用在一個節點上就可以,需要加上ON CLUSTER clickhouse_cluster這句,同樣集羣 刪除的話也可以加上這一句,在一個節點上操作,集羣上的每一個節點對應的表就會刪除,這個是集羣操作。

暴露給外部的只要一個邏輯表就可以了,一切的增刪改查都只能在邏輯表上,同時邏輯表也是一個集羣操作

四、綜合使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章