ClickHouse

您所在的位置:网站首页 select不能修改 ClickHouse

ClickHouse

2023-04-05 23:50| 来源: 网络整理| 查看: 265

1 安装部署1.1 下载最新版本1.2 单机部署执行1.2.1 服务端安装1.2.2 启动clickhouse服务1.2.3 客户端安装1.2.4 验证1.2.5 远程访问1.2.6 修改请求端口1.2.7 修改数据库数据文件路径1.3 集群部署1.3.1 机器信息1.3.2 创建配置文件/etc/metrika.xml1.3.3 重启三个节点clickhouse服务1.3.4 查询验证集群信息1.3.5 创建本地表1.3.6 创建Distributed 表1.3.7 插入数据2 数据导入3 适用场景和不适用场景3.1 适用场景3.2 不适用场景4 注意事项4.1 聚合指标不能同时出现在两个select字段中4.2 要用大表 join 小表4.3 如何快速地把HDFS中的数据导入ClickHouse

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS), 来自俄罗斯最大的搜索公司Yandex官网地址:https://clickhouse.tech源码地址:https://github.com/ClickHouse/ClickHouse

1 安装部署

1.1 下载最新版本

export LATEST_VERSION=$(curl -s https://repo.clickhouse.tech/tgz/stable/ | \ grep -Eo ‘[0-9]+.[0-9]+.[0-9]+.[0-9]+’ | sort -V -r | head -n 1)curl -O https://repo.clickhouse.tech/tgz/stable/clickhouse-common-static-$LATEST_VERSION.tgzcurl -O https://repo.clickhouse.tech/tgz/stable/clickhouse-common-static-dbg-$LATEST_VERSION.tgzcurl -O https://repo.clickhouse.tech/tgz/stable/clickhouse-server-$LATEST_VERSION.tgzcurl -O https://repo.clickhouse.tech/tgz/stable/clickhouse-client-$LATEST_VERSION.tgz

1.2 单机部署执行

1.2.1 服务端安装

tar -xzvf clickhouse-common-static-$LATEST_VERSION.tgzsudo clickhouse-common-static-$LATEST_VERSION/install/doinst.sh

tar -xzvf clickhouse-common-static-dbg-$LATEST_VERSION.tgzsudo clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh

tar -xzvf clickhouse-server-$LATESTVERSION.tgzsudo clickhouse-server-$LATEST_VERSION/install/doinst.sh执行成功将出现提示_Created symlink from /etc/systemd/system/multi-user.target.wants/clickhouse-server.service to /etc/systemd/system/clickhouse-server.service.Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/_

1.2.2 启动clickhouse服务

sudo /etc/init.d/clickhouse-server restart

1.2.3 客户端安装

tar -xzvf clickhouse-client-$LATEST_VERSION.tgzsudo clickhouse-client-$LATEST_VERSION/install/doinst.sh

1.2.4 验证

clickhouse-client —query “select 1”

1.2.5 远程访问

修改/etc/clickhouse-server/config.xml 取消注释

1.2.6 修改请求端口

默认http访问端口8123,默认tcp访问端口9000修改/etc/clickhouse-server/config.xml中对应的端口值

1.2.7 修改数据库数据文件路径

修改/etc/clickhouse-server/config.xml

1.3 集群部署

1.3.1 机器信息

LTSR005 192.168.0.15LTSR006 192.168.0.16LTSR007 192.168.0.15

前提条件:3台上面安装部署好zk集群

1.3.2 创建配置文件/etc/metrika.xml

默认这个配置文件是不存在的,/etc/clickhouse-server/config.xml有提示,如下:If element has ‘incl’ attribute, then for it’s value will be used corresponding substitution from another file.By default, path to file with substitutions is /etc/metrika.xml. It could be changed in config in ‘include_from’ element.Values for substitutions are specified in /yandex/name_of_substitution elements in that file.

配置文件内容如下:trueLTSR0059000trueLTSR0069000trueLTSR0079000LTSR0052181LTSR0062181LTSR0072181LTSR005::/0100000000000.01lz4

3台机器的配置文件都一样,唯一有区别的是: LTSR005

1.3.3 重启三个节点clickhouse服务

sudo /etc/init.d/clickhouse-server restart

1.3.4 查询验证集群信息

clickhouse-client —query “select * from system.clusters”

1.3.5 创建本地表

CREATE TABLE ontime_local (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192);注意3个节点上需要分别执行

1.3.6 创建Distributed 表

CREATE TABLE ontimeall AS ontime_local ENGINE = Distributed(perftest_3shards_1replicas, default, ontime_local, rand())perftest_3shards_1replicas为集群的名称default 为数据库名称ontime_local 为本地表名rand 数据分布方式(随机分布)注意:

由于搭建的是Clickhouse集群环境,建表时需要在集群节点上创建一个Distributed的表,在每个分片节点创建MergeTree的表。在数据导入和查询时直接操作Distributed表,Distributed表会自动路由到相应的MergeTree表。Hive中的数据类型,在Clickhouse中都有对应的类型名称:比如bigint -> Int64, int -> Int32, float -> Float32,需要按照Clickhouse的类型定义各个字段。Clickhouse的字段默认是不允许为NULL的,如果数据有可能为NULL,需要将字段定义为类似Nullable(Int64)的类型。创建MergeTree表,需要设置分区字段和排序字段,排序字段一般会选择将经常聚合的维度排在前面,如果不清楚常用查询场景的话,和分区字段一致就可以了。创建Distributed表,不需要分区字段和排序字段,但要注意在Clickhouse的集群节点创建,不要在分片节点创建。

_

1.3.7 插入数据insert into ontime_local (FlightDate,Year)values('2010-03-20',2010);insert into ontime_local (FlightDate,Year)values('2011-03-20',2011);insert into ontime_local (FlightDate,Year)values('2012-03-20',2012);

_

2 数据导入

将CSV文件导入到clickhouse数据库中1、在数据库中建立相应的表2、将csv文件进行导入导入的CSV文件没有字段名称时:cat /data/clickhouse/1.csv | clickhouse-client —query=”INSERT INTO 数据库.表名 FORMAT CSV”导入的CSV文件有字段名称时cat csv文件路径 | clickhouse-client —query=”INSERT INTO 数据库.表名 FORMAT CSVWithNames”注意:

如果表的字段是Nullable的话,在csv文件中,对应列的值应该为\N,否则将无法导入。由于将csv文件导入,执行的是INSERT语句,因此在导入前需要先Drop相应的分区,保证数据不会重复导入。但是Drop的操作需要直接在分片节点操作,因此需要找到分片节点。可以在每个分片节点的system.parts表中,查看该分片上包含哪些分区,如果存在的话则可以进行Drop操作。参考代码# 将csv中的NULL替换为\Nsed -i "s/NULL/\\\N/g" data.csv# drop分区已有的数据(需要找到对应的分片节点)clickhouse-client -h 10.128.184.59 --port 9000 -d ad_test -u ad_test --password adxxx --query="alter table t drop partition('2019-10-01')"# 导入数据到Clickhouse中cat data.csv | clickhouse-client -h 10.128.184.59 --port 8000 -d ad_test -u ad_test --password adxxx --format_csv_delimiter="|" --query="insert into t format CSV"

其他格式文件详见 https://zhuanlan.zhihu.com/p/161397267

tabseparated系列格式tskv格式csv系列格式json系列格式parquet格式orc格式其他常用的数据格式

3 适用场景和不适用场景

3.1 适用场景 绝大多数请求都是用于读访问的数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作数据只是添加到数据库,没有必要修改读取数据时,会从数据库中提取出大量的行,但只用到一小部分列表很“宽”,即表中包含大量的列查询频率相对较低(通常每台服务器每秒查询数百次或更少)对于简单查询,允许大约50毫秒的延迟列的值是比较小的数值和短字符串(例如,每个URL只有60个字节)在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)不需要事务数据一致性要求较低每次查询中只会查询一个大表。除了一个大表,其余都是小表

查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小

3.2 不适用场景

不支持真正的删除/更新支持 不支持事务

不支持二级索引有限的SQL支持,join实现与众不同不支持窗口功能元数据管理需要人工干预维护

4 注意事项

4.1 聚合指标不能同时出现在两个select字段中SELECT sum(charged_fees) AS charged_fees, sum(conversion_count) AS conversion_count, (sum(charged_fees) / sum(conversion_count)) / 100000 AS conversion_costFROM tWHERE dt = '2019-07-01'Received exception from server (version 19.1.9):Code: 184. DB::Exception: Received from 10.128.184.59:9000. DB::Exception: Aggregate function sum(charged_fees) is found inside another aggregate function in query.0 rows in set. Elapsed: 0.041 sec.

需改写为

SELECT sum(charged_fees) AS charged_fees, sum(conversion_count) AS conversion_count, (charged_fees / conversion_count) / 100000 AS conversion_costFROM tWHERE dt = '2019-07-01'┌──charged_fees─┬─conversion_count─┬────conversion_cost─┐│ 3143142724482 │ 250537 │ 150.37090954370022 │└───────────────┴──────────────────┴────────────────────┘1 rows in set. Elapsed: 0.155 sec. Processed 32.56 million rows, 1.20 GB (210.00 million rows/s., 7.77 GB/s.)

4.2 要用大表 join 小表

4.3 如何快速地把HDFS中的数据导入ClickHouse

参考https://blog.csdn.net/huochen1994/article/details/83827587



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3