zoukankan      html  css  js  c++  java
  • Clickhouse学习

    https://www.cnblogs.com/grapelet520/p/11280972.html#_label4

    https://www.jianshu.com/p/a5bf490247ea

    centos 7 下按照Clickhouse

    1.官网下载rpm包:https://packagecloud.io/Altinity/clickhouse
    我个人下载的:

    rpm -ivh clickhouse-server-common-20.1.11.73-1.el7.x86_64.rpm
    rpm -ivh clickhouse-common-static-20.1.11.73-1.el7.x86_64.rpm
    rpm -ivh clickhouse-server-20.1.11.73-1.el7.x86_64.rpm
    rpm -ivh clickhouse-client-20.1.11.73-1.el7.x86_64.rpm

    service clickhouse-server start

    clickhouse-client

    停止:
    service clickhouse-server stop

    启动:
    service clickhouse-server start

    用clickhouse-client连接本机clickhouse-server服务器:
    Clickhouse-client

    用本机clickhouse-client连接远程clickhouse-server服务器:
    clickhouse-client –host 192.168.3.54 –port 9000 –database default–user default –password

    放开远程访问
    vi /etc/clickhouse-server/config.xml
    修改服务器的配置文件/etc/clickhouse-server/config.xml,第88行,放开注释即可,修改之后的内容如下:

    <listen_host>::</listen_host> <--------主要这一行


    2.登录:默认default 用户,无需密码
    创建用户:vim /etc/clickhouse-server/users.xml 修改users.xml文件
    <users>
    .......
    <sangfor> --->用户名
    <networks incl="networks" replace="replace">
    <ip>::/0</ip> ---->允许所有地址访问
    </networks>
    <password>*****123</password> ---->明文密码
    <profile>default</profile>
    <quota>default</quota>
    </sangfor>
    ........
    </users>
    如通过 /etc/clickhouse-server/user.xml 创建用户:sangfor
    指定用户登录:clickhouse-client -u sangfor --password your_pwd

    3.创建数据库:
    CREATE DATABASE test ENGINE = Ordinary;
    创建表:
    CREATE TABLE db.tb1
    (
    `id` UInt16,
    `col1` String,
    `col2` String,
    `create_date` date
    )
    ENGINE = MergeTree(create_date, id, 8192)

    ENGINE:是表的引擎类型,

    MergeTree:最常用的,MergeTree要求有一个日期字段,还有主键。

    Log引擎没有这个限制,也是比较常用。

    ReplicatedMergeTree:MergeTree的分支,表复制引擎。

    Distributed:分布式引擎。

    create_date:是表的日期字段,一个表必须要有一个日期字段。

    id:是表的主键,主键可以有多个字段,每个字段用逗号分隔。

    8192:是索引粒度,用默认值8192即可。

    DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster] #删除数据库
    DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster] #删除表

    drop table if exists test.tb1;

    创建表:
    create table test.tb1 (sdt Date, id UInt16, name String, point UInt16) ENGINE=MergeTree(sdt, (id, name), 10);

    插入数据:
    insert into test.tb1 (sdt, id, name, point) values ('2020-04-28',12,'sangfor',20);

    二、创建表规则 ENGINE = MergeTree(date,id,8192)

    MergeTree引擎提供了根据日期进行索引和根据主键进行索引,同时提供了实时更新数据的功能(如,在写入数据的时候就可以对已写入的数据进行查询,不会阻塞。),mergetree是clickhouse里最先进的表引擎,不要跟merge引擎混淆。

      这个引擎接受参数形式如下:日期类型的列,可选的示例表达式,一个元祖定义了这个表的主键,索引的间隔尺寸。

    MergeTree(EventDate,(CounterID,EventDate),8192)

    包含示例的mergeTree:

    MerTree(EventDate,intHash32(UserId),(CounterID,EventDate,intHash32(UserID)),8192)

    MergeTree

      一个mergetree类型的表必须有一个包含date类型的列,在上面的例子里,该列是EventDate,这个日期列的类型必须是'Date'(不是‘DateTime’)

      这个主键必须是一个元祖,元素内容通常是表里的列或者一个单一的表达式。

      这个可选的示例可以是任何的表达式,但是这个表达式必须出现在主键里.上面的示例里使用的是一个哈希类型的userID,来伪随机的对主键里的CounterID和EventDate进行打散。换句话说,当使用了这个示例列的时候,可以伪随机的将用户打散成为均匀的子集。

      这个表是由很多个part构成。每一个part按照主键进行了排序,除此之外,每一个part含有一个最小日期和最大日期。当插入数据的时候,会创建一个新的sort part,同时会在后台周期性的进行merge的过程,当merge的时候,很多个part会被选中,通常是最小的一些part,然后merge成为一个大的排好序的part。

      换句话说,整个这个合并排序的过程是在数据插入表的时候进行的。这个merge会导致这个表总是由少量的排序好的part构成,而且这个merge本身并没有做特别多的工作。

      在插入数据的过程中,属于不同的month的数据会被分割成不同的part,这些归属于不同的month的part是永远不会merge到一起的。这么做的目的是provide local data modification(比较容易做备份)。

      这些part在进行合并的时候会有一个大小的阈值,所以不会有太长的merge过程。

      对于每一个part,会生成一个索引文件。这个索引文件存储了表里面每一个索引块里数据的主键的value值,换句话说,这是个对有序数据的小型索引。

      对列来说,在每一个索引块里的数据也写入了标记,从而让数据可以在明确的数值范围内被查找到。

      当读表里的数据时,SELECT查询会被转化为要使用哪些索引。这些索引会被用在判断where条件或者prewhere条件中,来判断是否打中了这些索引区间。

      因此,能够快速查询一个或多个主键范围的值。在下面的示例中,能够快速的查询一个明确的counter,指定范围的日期区间里的一个明确的counter,各种counter的集合等。

  • 相关阅读:
    【JDK8特性】Stream接口详解
    【JDK8特性】Optional包装类详解
    【JDK8特性】lambda表达式详解
    关闭windows defender 扫描目录
    IIS服务启动提示当文件已存在时,无法创建该文件,183(转载)
    java部署到ubuntu
    设计模式之模板模式
    Aop示例之注解切面方式实现日志打印
    多线程实现生产消费模式
    关于linux-centos 7.x中使用xfreerdp命令去连接windows主机的远程桌面
  • 原文地址:https://www.cnblogs.com/shiqi17/p/12796854.html
Copyright © 2011-2022 走看看