介绍

  • ClickHouse可能更适合流式或批次入库的时序数据。ClickHouse不应该被用作通用数据库
  • ClickHouse是一个超高性能的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如GROUP BY),ClickHouse的查询更快,因此通常情况下在MySQL上进行聚合。
  • ClickHouse是一个数据分析的数据库,那么存储的数据应当是最终成型的结果

CH的一些限制

  • 不支持真正的删除/更新支持 不支持事务(与Spark和大部分大数据系统一样)
  • 不支持二级索引(和Spark和大部分大数据系统一样)自己的协议(不支持MySQL协议)
  • 有限的SQL支持,join实现与众不同。如果需要在从MySQL或Spark进行迁移,则可能必须重新编写包含联接的所有查询。
  • 不支持窗口功能

单机安装及运行

ubuntu安装

centos7 安装

  • 需要以rpm包的形式进行安装
1.clickhouse-server-common-18.12.17-1.el7.x86_64.rpm
2.clickhouse-common-static-18.12.17-1.el7.x86_64.rpm
    # 这一步会提示缺少依赖
    # libicudata.so.50()(64bit) 被 clickhouse-common-static-18.12.17-1.el7.x86_64 需要
    # libicui18n.so.50()(64bit) 被 clickhouse-common-static-18.12.17-1.el7.x86_64 需要
    # libicuuc.so.50()(64bit) 被 clickhouse-common-static-18.12.17-1.el7.x86_64 需要
    # 通过 yum install *libicudata* 安装后解决
3.clickhouse-server-18.12.17-1.el7.x86_64.rpm
4.clickhouse-client-18.12.17-1.el7.x86_64.rpm
  • 安装过程中,可能会提示需要依赖,参考以下解决
  • 如果上述方式解决不了,暴力方式 yum install *libicudata* ,我以此方式解决问题
  • Linux rpm安装到指定的目录:

运行

  • sudo service clickhouse-server start 可能无法启动,原因是权限问题,根据提示修改权限即可
  • 日志所在位置 /var/log/clickhouse-server/ directory
  • 配置文件所在位置 /etc/clickhouse-server/config.xml
  • 如果要执行有换行的格式化的sql语句,需要使用 clickhouse-client --multiline(简写 -m) 才可以

测试过程中发现的注意事项

  • Date类型,如果是从csv文件导入,那么csv中的时间有无双引号不影响插入数据
  • Decimal类型的数据,需要在建表前设置全局可用 在clickhouse-client内执行 set allow_experimental_decimal_type=1; ,不需要设置Decimal128,Decimal64等,直接使用 Decimal ( 38, 6 ) 也就是直接用Decimal替换了oracle中的NUMBER类型
  • 执行sql语句时,字符串不能是双引号,只能是单引号

mysql类型和clickhouse数据类型的对应关系

tinyint             UInt8 / Int8
smallint            UInt16 / Int16
int / mediumint     UInt32 / Int32
bigint              UInt64 / Int64
float               Float32
double              Float64
date                Date    似乎不能为空        有可以表达的范围差异
datetime            DateTime        有可以表达的范围差异
timestamp           DateTime
binaryFixed         String
除上述以外           String
  • kettle导出csv文件的处理,时间为null时,因为不知道如何处理clickhouse中时间为空的情况,因此将其全部替换成了0000-00-00(此为官方文档中写明最小值)
  • 经测试直接从mysql导入数据,会自动将空的时间填充为0000-00-00,和上述方式一致,猜测Date类型不能为空,字符串类型不存在此问题
  • 注意kettle导出csv文件时,设置字符集为utf-8
# 从mysql导入数据至clickhouse中
CREATE TABLE company
ENGINE = MergeTree
ORDER by id as
select * 
from mysql('192.168.3.191:3306', 'ganji', 'company', 'root', 'abcd34')

配置远程访问

vim /etc/clickhouse-server/config.xml 解除以下两项的注释并修改第二项为本机ip

<listen_host>::1</listen_host>  # ipv6访问
<listen_host>本机ip</listen_host>  # ipv4访问

配置完成,即可通过浏览器远程访问http端口了,默认是8123端口

http接口测试

  • http接口可以执行select create insert drop等等命令
    http://192.168.3.191:8123
  • 可以使用get和post请求均可,由于get请求url长度限制,使用post请求
  • 主要参数:
  • query:此参数值为要执行的sql语句,注意sql语句中不要有双引号
  • database:此参数用来指定默认数据库,如default ,system,也可以在sql语句中表名前使用点指定数据库
  • compress:指定此参数为1,则服务器会压缩数据返回,暂未测试出有什么用
  • decompress:指定此参数为1,服务器会解压缩post请求中携带的数据,未测试
    以上两种压缩与解压缩,以什么格式进行压缩和解压缩不清楚
  • user:用户名,默认名是default
  • password:密码,默认密码是空
  • session_id:任意字符串
  • 使用标准的基于gzip的http压缩
  • 要发送使用gzip压缩的POST请求,请附加请求标头Content-Encoding:gzip。
  • 为了让ClickHouse使用gzip压缩响应,您必须将Accept-Encoding:gzip附加到请求标头,并启用ClickHouse的setting中的enable_http_compression
  • 还可以在参数中携带设置setting内容的参数

用户及密码设置

  • 配置用户名及密码在/etc/clickhouse-server/users.xml 中,配置方法文件内有说明,或参考 ,关于sha256加密的生成使用python来生成,文件内提供的shell方式,生成的密码是随机值,不清楚如何指定
  • 使用用户名密码进入客户端:clickhouse-client -u username -h 192.168.0.10 --password mc1lF9cI
  • sha256加密后:abcd@1234 = ‘345616f307c62eaf232f2d5e25c430958023c91436d2ef2caebb5b866b07ecd1’
  • 自设用户名为root,密码abcd@1234,使用default数据库,权限和default用户雷同
<root>
            <password_sha256_hex>345616f307c62eaf232f2d5e25c430958023c91436d2ef2caebb5b866b07ecd1</password_sha256_hex>
            <networks incl="networks" replace="replace">
                <ip>::/0</ip>
            </networks>
            <profile>default</profile>
            <quota>default</quota>
            <allow_databases>
                <database>default</database>
            </allow_databases>
        </root>

卸载后重新安装

卸载

  • rpm安装,注意使用rpm卸载

提示冲突

  • rpm conflicts with file from package
    原因:因为之前安装过
    解决:rpm -ivh --force RPM包名

docker官方镜像

https://hub.docker.com/search/?isAutomated=0&isOfficial=0&page=1&pullCount=0&q=clickhouse&starCount=0

kettle迁移oracle至mysql

基本操作
kettle大数据量读写mysql性能优化