日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[数据库] --- clickhouse

發布時間:2024/7/23 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数据库] --- 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引擎,主要有個分區的特點。
我們可以指定按天分區,或者按月分區,那么后面查詢或者刪除的時候,就可以按天或按月。
建表規范如下

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] (name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2 ) ENGINE = MergeTree() [PARTITION BY expr] [ORDER BY expr] [PRIMARY KEY expr] [SAMPLE BY expr] [SETTINGS name=value, ...]

重點看mergeTree()后面各個屬性的定義順序

刪除數據(mergeTree引擎)

帶分區的引擎,可以按分區刪除。
以按天分區的表舉例:
表名:response_event
不需要指定字段名,因為建表的時候已經指定了。

ALTER TABLE response_event DROP PARTITION '2019-11-11';

如果這個字段是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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。