[数据库] --- clickhouse
clickhouse是一個列式數據庫(系統)。
官方文檔
官網比較全,但也可以說比較雜,下面就是我個人的一些總結,以及在實際工作中的應用場景。
1.clickhouse適用場景
clickhouse主要適合那種大量數據做分析的場景。
一般數據insert進去,也就不要修改和刪除了。
比如那種埋點的數據,每秒成百上千條插入,但對事務的要求不高。
clickhouse比較吃內存,這也是它比較快的原因之一。
我實際工作的場景,就是把每天幾百萬甚至幾千萬的業務數據,在各個維度把數據拉平,存在clickhouse中,所以存的是最細分的數據,然后作為統計報表的查詢庫,可以查出各個維度下或多個維度下的數據了。
2.clickhouse與mysql類比。
初學的時候,你可以把clickhouse類比mysql來用。
同樣的都有數據庫,都要創建表,都支持sql標準。
clickhouse的數據也是存在表中的,先建庫,再建表,最后insert數據。
clickhouse默認有一個default庫,建表的時候,數據類型的定義和mysql不一樣,以及引擎也不一樣。
clickhouse一般都用的是mergeTree引擎,我們后面也是以這個引擎為例。
3.clickhouse常用數據類型
clickhouse表中的每個字段,都必須在創建表的時候指定數據類型,常用的有以下幾種:
1.整形
整型范圍 Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-9223372036854775808 : 9223372036854775807] 無符號整型范圍 UInt8 - [0 : 255] UInt16 - [0 : 65535] UInt32 - [0 : 4294967295] UInt64 - [0 : 18446744073709551615]常用UInt16
2.浮點型
Float32, Float64
我用的比較少
3.Decimal
涉及到錢等類似其他精細計算的類型
4.String
最常用的類型,萬物皆String
5.Date
精確到天,對應java中,是long類型。
insert的時候注意單位
當表的引擎用mergeTree時,還必須要有個Date類型的字段。
6.DateTime
精確到秒,對應java中,也是long類型
insert的時候,也是注意單位
7.其他
官網還提供了其他類型,平時用不到,所以先不說了
5.clickhouse的引擎
clickhouse提供了很多引擎,我們注意說說mergeTree
mergeTree引擎,主要有個分區的特點。
我們可以指定按天分區,或者按月分區,那么后面查詢或者刪除的時候,就可以按天或按月。
建表規范如下
重點看mergeTree()后面各個屬性的定義順序
刪除數據(mergeTree引擎)
帶分區的引擎,可以按分區刪除。
以按天分區的表舉例:
表名:response_event
不需要指定字段名,因為建表的時候已經指定了。
如果這個字段是null,就用 ‘0000-00-00’
4.實戰—java中使用clickhouse
1.使用maven
<dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.1.48</version></dependency>2.JDBC連接數據庫
ClickHouseProperties properties = new ClickHouseProperties();properties.setDataTransferTimeout(5 * 60 * 1000);properties.setMaxExecutionTime(5 * 60 * 1000);properties.setSocketTimeout(5 * 60 * 1000);ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://clickhouse的ip:8123/default", properties);ClickHouseConnection connection = dataSource.getConnection();ClickHouseStatement statement = connection.createStatement();3.創建表
CREATE TABLE response_event(requestId String,event UInt8,...eventTime DateTime,createDate Date)ENGINE = MergeTree PARTITION BY toDate(createDate) ORDER BY (createDate) SETTINGS index_granularity=8192; boolean execute = statement.execute(sql);4.插入數據
INSERT INTO response_event(requestId,event,...eventTime,createDate) values(.......) boolean execute = statement.execute(sql);5.查詢數據
select count(1) from response_event; select * from response_event; ClickHouseResponse response = statement.executeQueryClickhouseResponse(sql);JSONObject res = JSONObject.parseObject(JSONObject.toJSONString(response));JSONArray data = res.getJSONArray("data");JSONArray meta = res.getJSONArray("meta");5.clickhouse可視化軟件
類似于mysql的navicat,clickhouse常用DBeaver來可視化
DBeaver官網下載,直接安裝
總結
以上是生活随笔為你收集整理的[数据库] --- clickhouse的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七、区块链如何运用merkle tree
- 下一篇: linux cmake编译源码,linu