ClickHouse概念

ClickHouse概述
    1.列式是数据库  2.在线分析处理(OLAP)  3.底层是C++编写
    多样化引擎、数据分区/线程级并行(耗CPU)、顺序读写。适用于固定宽表查询
    单表查询擅长,多表关联查询不擅长。
ClickHouse数据类型
    Int:Int8、Int16、Int32、Int64。UInt8、UInt16、UInt32、UInt64。
    Float:Float32、Float64
    Boolean:Int8
    Decimal:Decimal32(5)整数+小数=9位 小数5位、Decimal64(5)整数+小数=18位 小数5
        Decimal128(5)整数+小数=38位 小数5
    StringString、FixedString(N)添加空字节补全
    Enum:Enum8('hello'=1,'world'=2'String'=Int8 描述    Enum16 'String'=Int8
        插入的时候只能插入固定的字符串或者整数、select cast(x,'Int8'from table;
    日期:Date(2019-12-16) Datetime(2019-12-16 10:15:10) Datetime64(2019-12-16 10:15:10.47
    数组:Array(1,2) 或者 [1,2]
    空值:Nullable 使用空值会对性能产生负面影响
表引擎
    TinyLog:列文件保存在磁盘上,不支持索引、没有并发控制、保存数据量小的表(小于100万行)
    Memory:以未压缩形式保存在内存中、服务器重启会消失、数据量不大太(一亿以内)
    MergeTree:支持索引分区、其他表子引擎

引擎

MergeTree表语句+解释
        //主键索引,但是数据不强调唯一
        create table data(id Uint32,name String,time Datetime)engine=MergeTree 
        partition by toYYYYMMDD(Datetime) primary key(idorder by (id,name)  
        SETTINGS index_granularity=8192 //数据间隔  大量重读的需要调整
        //分区是分目录(列文件+索引文件+表定义文件)  一个分区一个线程  
        //order by 是分区内有序的,是必须填的。orderby 主键必须是第一个字段
        //二级索引:create table data(id Uint32,INDEX a total_amount TYPE minmax GRANULARITY 5)
        //二级索引作用:minmax GRANULARITY二级索引对于一级索引粒度的粒度(每次跳几个一级索引)
        //二级索引场景:数据大量重复,一级索引不明显的时候
TTL
        create table data(id Uint32 TTL create_time + INERVAL 10 SECONG);  字段级别
        alter table data(id Uint32) MODIFY TTL create_time + INERVAL 10 SECONG; 表级别

        create table data(id Uint32,name String,time Datetime)engine=MergeTree 
        partition by toYYYYMMDD(Datetime) primary key(idorder by (id,name)  
        TTL create_time + INERVAL 1 MONTH DELETE WHERE toDayOfWeek(d)=1

        SECONG/MINUTE/HOUR/DAY/MONTH
        create_time 不能是主键,类型必须是日期类型
储文件解释
        //分区存储:分区名称+最小分区编号+最小分区编号+合并等级(被合并的次数)
        //手动合并分区命令:optimize table XXXXX partition '20221010' final;
        bin文件:数据文件 mrk:标记文件(idx,bin桥梁作用)
        primary.idx:主键索引文件,加快查询效率
        minmax_create_time.idx:分区键的最大最小值
        checksums.txt:校验文件,用于校验各个文件的正确性。存放文件的size和hash值
ReplacingMergeTree
    性能继承MergeTree,但是多了去重功能,order by 字段作为唯一约束
    去重的时机:数据插入,合并分区去重,插入数据会默认去重一下   去重不能跨分区
    建表语句及解释:
        create table data(id Uint32,name String,time Datetime)engine=ReplacingMergeTree(create_time)
        partition by toYYYYMMDD(Datetime) primary key(idorder by (id,name)  
        //ReplacingMergeTree(create_time) create_time作为版本字段。默认保留最后一条插入
SummingMergeTree
    应用场景:不查询明细数据,只关心以维度聚合。非实时聚合,分区合并的时候聚合
    create table data(id Uint32,name String,time Datetime)engine=SummingMergeTree(score)
    partition by toYYYYMMDD(Datetime) primary key(idorder by (id,name)  
    //依据order by 的字段作为维度,聚合score   插入数据的时候默认会聚合一次
SQL样例
    insert into table_name values
    insert into table_name select * from table_name_a
    alter table_name delete where column='10' //删除数据
    alter table_name update name='zhangsan' where column='10' //修改数据
    删除和修改操作都比较重,高性能思路:
        更新的时候插入一条新数据,version+1,查询的时候version=max(version)
        删除:0表示未删除 1表示删除 查询的时候加一个条件 _sign=0
    子查询、with、支持join(但是没法使用缓存)、
    if(1,mm,nn) 1=true  nultiIf(con_1,then_1,con_2,then_2,con_3,then_3)
    group by a,b with rollup=a|a,b|all  group by a,b with cube=a|b|all|a,b   
        group by a,b with totals=a,b|all
    alter table table_name add column new_column_name String after col1;
    alter table table_name modify column new_column_name String ;
    alter table table_name drop column;
集群表
    CREATE TABLE on cluster dmp default.userpkg_all (gazj StringENGINE = Distributed(dmp, default, userpkg, hiveHash(id))
    CREATE TABLE on cluster dmp default.userpkg_all (gazj String
        ENGINE = MergeTree partition by toYYYYMMDD(Datetime) order by (id,name)  //在每个节点都创建本地表
    插入数据的时候:向分布式表插入数据

原文地址:http://www.cnblogs.com/wuxiaolong4/p/16814687.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性