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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ClickHouse入门

發布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ClickHouse入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 什么是ClickHouse

? ClickHouse 是俄羅斯的Yandex于2016年開源的列式存儲數據庫(DBMS),他的優勢就是快,每秒處理的數據量特別大,主要用于在線分析處理查詢(OLAP),能夠使用SQL查詢實時生成分析數據報告。

? 與Hadoop、Spark這些巨無霸組件相比,ClickHouse很輕量級,其特點:列式存儲數據庫,數據壓縮;關系型、支持SQL;分布式并行計算,把單機性能壓榨到極限;高可用;數據量級在PB級別。

適用場景:日志數據的行為分析,標簽畫像的分析,數據集市層分析等。

2 ClickHouse安裝

? 下載地址:https://packagecloud.io/altinity/clickhouse

? (1)安裝前準備:

? ①取消CentOS取消打開文件數限制:在/etc/security/limits.conf、/etc/security/limits.d/90-nproc.conf這2個文件的末尾加入一下

* soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072

? ②CentOS取消SELINUX:修改/etc/selinux/config中的SELINUX=disabled后重啟

SELINUX=disabled

? ③關閉防火墻

? (2)下載四個安裝包

wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-server-common-1.1.54362-1.el6.x86_64.rpm/download.rpm wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-server-1.1.54362-1.el6.x86_64.rpm/download.rpm wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-debuginfo-1.1.54362-1.el6.x86_64.rpm/download.rpm wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/6/clickhouse-client-1.1.54362-1.el6.x86_64.rpm/download.rpm

? (3)安裝server-common

sudo rpm -ivh clickhouse-server-common-1.1.54362-1.el6.x86_64.rpm

? (2)安裝server

sudo rpm -ivh clickhouse-server-1.1.54362-1.el6.x86_64.rpm

? 如果遇到下面依賴問題安裝依賴包

error: Failed dependencies:libicudata.so.42()(64bit) is needed by clickhouse-common-static-19.7.3.9-1.el6.x86_64libicui18n.so.42()(64bit) is needed by clickhouse-common-static-19.7.3.9-1.el6.x86_64libicuuc.so.42()(64bit) is needed by clickhouse-common-static-19.7.3.9-1.el6.x86_64 ---------------------------------------------------------------------------yum install libicu.x86_64 yum install -y unixODBC libicudata

? (3)安裝debug

sudo rpm -ivh clickhouse-debuginfo-1.1.54362-1.el6.x86_64.rpm

? (4)安裝client

sudo rpm -ivh clickhouse-client-1.1.54362-1.el6.x86_64.rpm

? (5)驗證:因為安裝好后會直接寫如環境變量,所以直接clousehouse看有沒有提示就行

? (6)啟動

前臺啟動:clickhouse-server --config-file=/etc/clickhouse-server/config.xml 后臺啟動:nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml >null 2>&1 &

? (7)client連接server

# clickhouse-client ClickHouse client version 1.1.54236. Connecting to localhost:9000. Connected to ClickHouse server version 1.1.54236.bigdata01 :)

? 客戶端連接常用參數

參數說明
–host, -h服務端的 host 名稱, 默認是 ‘localhost’
–port連接的端口,默認值: 9000。
–user, -u用戶名。 默認值: default。
–password密碼。 默認值: 空字符串。
–query, -q非交互模式下的查詢語句.
–database, -d默認當前操作的數據庫。 默認值: default
–multiline, -m允許多行語句查詢
–format, -f使用指定的默認格式輸出結果。
–time, -t非交互模式下會打印查詢執行的時間到窗口。
–stacktrace如果出現異常,會打印堆棧跟蹤信息。
–config-file配置文件的名稱。

? (8)關閉ClickServer

service clickhouse-server stop

3 分布式集群及配置文件

? 按上面步驟在4個節點安裝ClickHouse,然后修改配置文件

? 我是使用“Core Data & Core AI 流分析平臺 JDP” 網址:http://www.fusionlab.cn/

? 配置文件說明: ClickHouse的配置文件是config.xml,默認在/etc/clickhouse-server/目錄中

? (1)config.xml

<?xml version="1.0" encoding="utf-8"?> <yandex><!-- logger:日志記錄設置--><logger><count>10</count> -- ClickHouse存儲的已歸檔日志文件的數量<size>1000M</size> -- 文件的大小。適用于loganderrorlog,文件達到大小后,ClickHouse將對其進行存檔并重命名,并在其位置創建一個新的日志文件<errorlog>/var/log/clickhouse-server/error.log</errorlog> -- 錯誤日志文件<log>/var/log/clickhouse-server/server.log</log> --日志文件,根據級別包含所有條目<level>trace</level> --日志記錄級別。可接受的值: trace, debug, information, warning, error</logger><remote_servers incl="clickhouse_remote_servers"/><!-- listen_host:限制來源主機的請求, 如果要服務器回答所有請求,請指定“::”--><listen_host>::</listen_host><!--tcp_port:通過TCP協議與客戶端進行通信的端口,即ClickHouse端口--><tcp_port>9000</tcp_port><zookeeper incl="zookeeper-servers" optional="true"/><distributed_ddl><path>/clickhouse/task_queue/ddl</path></distributed_ddl><!--max_connections:最大連接數--_<max_connections>64</max_connections><builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval><!--通過HTTP連接到服務器的端口--><http_port>8123</http_port><!--users_config:用戶配置文件,可以配置用戶訪問、profiles、quota、查詢等級等。--><users_config>users.xml</users_config><!--macros:復制表的參數替換,如果不使用復制表,則可以省略--><macros incl="macros" optional="true"/><!-- tmp_path:用于處理大型查詢的臨時數據的路徑--><tmp_path>/data/clickhouse/tmp/</tmp_path><!--max_table_size_to_drop:刪除表的限制,默認50G,0表示不限制_<max_table_size_to_drop>0</max_table_size_to_drop><!--uncompressed_cache_size:表引擎從MergeTree使用的未壓縮數據的緩存大小--><uncompressed_cache_size>8589934592</uncompressed_cache_size><!--include_from:帶替換文件的路徑--><include_from>/etc/clickhouse-server/config/metrika.xml</include_from><!--query_log:通過log_queries = 1設置,記錄接收到的查詢--><log_queries>1</log_queries><!--max_concurrent_queries:同時處理的最大請求數--><max_concurrent_queries>16</max_concurrent_queries><!--path:數據的目錄路徑。--><path>/data/clickhouse</path><!--interserver_http_host:其他服務器可以用來訪問該服務器的主機名。如果省略,則其定義方法與hostname -f命令相同><interserver_http_host>ambari01</interserver_http_host><!-- mark_cache_size:標記緩存的大小,用于MergeTree系列的表中--><mark_cache_size>10737418240</mark_cache_size><!--default_profile:默認設置配置文件,在參數user_config中指定--><default_profile>default</default_profile><!--keep_alive_timeout:ClickHouse在關閉連接之前等待傳入請求的秒數。 默認為3秒--><keep_alive_timeout>3</keep_alive_timeout><!--default_database:默認數據庫--><default_database>default</default_database><!-- interserver_http_port:于在ClickHouse服務器之間交換數據的端口--><interserver_http_port>9009</interserver_http_port>

? (2)metrika.xml

<?xml version='1.0' encoding='utf-8'?> <yandex><!--宏配置,這里唯一標識一個副本名稱,每個實例都要配置并且都是唯一的--><macros><layer>01</layer>---layer:雙級分片設置,單集群所以這個值對我們沒有影響全部一樣即可<replica>ambari01-01-1</replica>---replica是副本標識,這里使用了cluster{layer}-{shard}-{replica}的表示方式,ambari01-01-1表示ambari01集群的01分片下的1號副本<shard>01</shard>---shard:分片編號</macros><!--zookeeper配置--><zookeeper-servers><node index="1"><host>ambari01</host><port>2181</port></node><node index="2"><host>ambari02</host><port>2181</port></node><node index="3"><host>ambari03</host><port>2181</port></node></zookeeper-servers><!--compression:MergeTree引擎表的數據壓縮設置--><clickhouse_compression><case><min_part_size>10000000000</min_part_size>--數據部分的最小大小<min_part_size_ratio>0.01</min_part_size_ratio> --數據部分大小與表大小的比率<method>lz4</method>---壓縮算法,zstd和lz4</case></clickhouse_compression><!--remote_servers:遠程服務器,分布式表引擎和集群表功能使用的集群的配置--><clickhouse_remote_servers><!---ck_cluster:集群名稱--><ck_cluster><!---第一個分片--><shard><!--internal_replication,表示是否只將數據寫入其中一個副本,默認為false,表示寫入所有副本,在復制表的情況下可能會導致重復和不一致,所以這里一定要改為true,clickhouse分布式表只管寫入一個副本,其余同步表的事情交給復制表和zookeeper來進行--><internal_replication>true</internal_replication><!---第一個分片的第一個副本--><replica><host>ambari01</host><user>admin</user><password>admin</password><port>9000</port></replica><!---第一個分片的第二個副本--><replica><host>ambari02</host><user>admin</user><password>admin</password><port>9000</port></replica></shard><!---第二個分片--><shard><internal_replication>true</internal_replication><!---第二個分片的第一個副本--><replica><host>ambari03</host><user>admin</user><password>admin</password><port>9000</port></replica><!---第二個分片的第二個副本--><replica><host>ambari04</host><user>admin</user><password>admin</password><port>9000</port></replica></shard></ck_cluster></clickhouse_remote_servers><!--networks表示允許被登陸clickhouse服務器的客戶端列表,支持通過ip、host、host_regexp方式設置--><networks><ip>::/0</ip></networks>

? (3)users.xml

<?xml version="1.0" encoding="utf-8"?> <yandex><!--profile:類似于用戶角色,可以實現最大內存、負載方式等配置的服用--><profiles><!--可自定義名稱,default是默認存在的角色名稱--><default><load_balancing>random</load_balancing><max_memory_usage>10000000000</max_memory_usage><use_uncompressed_cache>0</use_uncompressed_cache></default><!--自定義readonly角色--><readonly><load_balancing>random</load_balancing><max_memory_usage>10000000000</max_memory_usage><readonly>1</readonly><use_uncompressed_cache>0</use_uncompressed_cache></readonly></profiles><!--quotas:限制一段時間內的資源使用等--><quotas><default><interval><duration>3600</duration><errors>0</errors><execution_time>0</execution_time><queries>0</queries><read_rows>0</read_rows><result_rows>0</result_rows></interval></default></quotas><!--users:設置包括用戶名、密碼、權限等--><users><admin><networks incl="networks" replace="replace"><ip>::/0</ip></networks><password_sha256_hex>8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918</password_sha256_hex><profile>default</profile><quota>default</quota></admin><ck><networks incl="networks" replace="replace"><ip>::/0</ip></networks><password_sha256_hex>8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918</password_sha256_hex><profile>readonly</profile><quota>default</quota></ck></users> </yandex> 生成密碼 PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

4 數據類型

? 官方文檔:https://clickhouse.yandex/docs/zh/data_types/

? 下面介紹幾種常見的數據類型

4.1 整型

? 固定長度的整型,包括有符號整型或無符號整型。

? (1)整型 范圍(-2n-1~2n-1-1):

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

? (2)無符號整型范圍(0~2n-1):

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

4.2 浮點型

? Float32 》 float ;Float64》double

? 建議盡可能以整數形式存儲數據,浮點型進行計算時可能引起四舍五入的誤差。

? 特殊的浮點型

? (1)Inf-正無窮

:) select 1-0.9 ┌───────minus(1, 0.9)─┐ │ 0.09999999999999998 │ └─────────────────────┘

? (2)-Inf-負無窮

:) select -1/0 ┌─divide(1, 0)─┐ │ -inf │ └──────────────┘

? (3)NaN-非數字

:) select 0/0 ┌─divide(0, 0)─┐ │ nan │ └──────────────┘

4.3 字符串

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

? FixedString(N):固定長度 N 的字符串,N 必須是嚴格的正自然數。當服務端讀取長度小于 N 的字符串時候,通過在字符串末尾添加空字節來達到 N 字節長度。 當服務端讀取長度大于 N 的字符串時候,將返回錯誤消息。

4.4 數組

? Array(T):由 T 類型元素組成的數組。T 可以是任意類型,包含數組類型。 但不推薦使用多維數組,ClickHouse 對多維數組的支持有限。如不能在 MergeTree 表中存儲多維數組。

? 創建方式:①使用array函數來創建數組array(T)②可以使用方括號[]

4.5 元組

? Tuple(T1, T2, …):元組,其中每個元素都有單獨的類型

? 創建方式:使用tuple函數tuple(T1, T2, …)

4.6 Date

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

4.7 枚舉

? 包括 Enum8 和 Enum16 類型。Enum 保存 ‘string’= integer 的對應關系。Enum8 用 ‘String’= Int8 對描述。Enum16 用 ‘String’= Int16 對描述。

? 使用案例:創建一個帶有一個枚舉 Enum8(‘hello’ = 1, ‘hi’ = 2) 類型的列:

CREATE TABLE t_enum(x Enum8('hello' = 1, 'hi' = 2) )ENGINE = TinyLog

? 這個 x 列只能存儲類型定義中列出的值:‘hello’或’hi’。如果嘗試保存任何其他值則報錯

:) INSERT INTO t_enum VALUES ('hello'), ('hi')INSERT INTO t_enum VALUESOk.:) insert into t_enum values('a')INSERT INTO t_enum VALUESException on client: Code: 49. DB::Exception: Unknown element 'a' for type Enum8('hello' = 1, 'hi' = 2)

? 從表中查詢數據時,ClickHouse 從 Enum 中輸出字符串值,如果需要看到對應行的數值,則必須將 Enum 值轉換為整數類型

SELECT CAST(x, 'Int8') FROM t_enum┌─CAST(x, 'Int8')─┐ │ 1 │ │ 2 │ └─────────────────┘

5 SQL語法

5.1 CREATE

? (1) CREATE DATABASE:用于創建指定名稱的數據庫,語法如下:

CREATE DATABASE [IF NOT EXISTS] db_name

? 如果查詢中存在IF NOT EXISTS,則當數據庫已經存在時,該查詢不會返回任何錯誤。

? (2)CREATE TABLE:對于創建表,語法如下:

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] (name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],... ) ENGINE = engine DEFAULT expr – 默認值,用法與SQL類似。 MATERIALIZED expr – 物化表達式,被該表達式指定的列不能被INSERT,因為它總是被計算出來的。 對于INSERT而言,不需要考慮這些列。 另外,在SELECT查詢中如果包含星號,此列不會被查詢。 ALIAS expr – 別名。

? 有三種方式創建表:

? ①直接創建: create table t1(id UInt16,name String) engine=TinyLog

? ②創建一個與其他表具有相同結構的表:CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]

? 可以對其指定不同的表引擎聲明。如果沒有表引擎聲明,則創建的表將與db2.name2使用相同的表引擎。

? ③使用指定的引擎創建一個與SELECT子句的結果具有相同結構的表,并使用SELECT子句的結果填充它。CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT …

5.2 INSERT INTO

? 主要用于向表中添加數據,基本格式如下:

INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...

? ClickHouse不支持的修改數據的查詢:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。

5.3 ALTER

? ALTER只支持MergeTree系列,Merge和Distributed引擎的表,基本語法:

ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...

? 參數說明:ADD COLUMN – 向表中添加新列;DROP COLUMN – 在表中刪除列;MODIFY COLUMN – 更改列的類型

5.4 DESCRIBE TABLE

? 查看表結構:desc mt_table

5.5 CHECK TABLE

? 檢查表中的數據是否損壞,他會返回兩種結果:0 – 數據已損壞1 – 數據完整

? 該命令只支持Log,TinyLog和StripeLog引擎。

總結

以上是生活随笔為你收集整理的ClickHouse入门的全部內容,希望文章能夠幫你解決所遇到的問題。

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