ClickHouse表常用引擎

  •  

  • TinyLog

  1. 是最简单的表轻量引擎(最多约100万行), 一写多读的应用场景。同时读写会损害数据
  2. TinyLog 表经常作为中间表,用于数据的微批量处理. 语法中无需携带任何参数
  3. 它将数据保存到磁盘. 每个字段都以单独压缩文件形式保存. 当写入数据时, 数据追加到文件的末尾
  • 创建表的样例:
    CREATE  TABLE  [ IF  NOT  EXISTS ]  [ db 。] table_name  [ ON  CLUSTER  cluster ] 
    		(
        name1  [ type1 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr1 ]  [ TTL  expr1 ],
       	name2  [ type2 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr2 ]  [ TTL  expr2 ],
      	 	 	... 
      	INDEX index_name1  expr1的 TYPE  TYPE1 (...) 粒度 值1 ,
        INDEX  index_name2  表达式2  TYPE  TYPE2 (...) 粒度 值2 
    ) ENGINE  =  TinyLog();

    MergeTree

  1. 这是目前 ClickHouse处理能力最好的引擎.
  2. 引擎支持索引,通过主键和日期来构建索引, 同时提供 数据的实时更新能力.   

创建表的样例:

CREATE  TABLE  [ IF  NOT  EXISTS ]  [ db 。] table_name  [ ON  CLUSTER  cluster ] 
		(
    name1  [ type1 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr1 ]  [ TTL  expr1 ],
   	name2  [ type2 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr2 ]  [ TTL  expr2 ],
  		 	 ... 
  	INDEX index_name1  expr1的 TYPE  TYPE1 (...) 粒度 值1 ,
    INDEX  index_name2  表达式2  TYPE  TYPE2 (...) 粒度 值2 
) ENGINE  =  MergeTree ()
[ PARTITION  BY  EXPR ] 
[ ORDER  BY  EXPR ] 
[ PRIMARY  KEY  EXPR ] 
[ 样品 BY  EXPR ] 
[ SETTINGS  name = value, ...]
  • ReplacingMergeTree

  1. 适用于在后台清除重复数据以节省空间,但不保证不存在重复。
  2. 创建表的样例:
CREATE  TABLE  [ IF  NOT  EXISTS ]  [ db 。] table_name  [ ON  CL	USTER  cluster ] 
		(	
    	name1  [ type1 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr1 ]  [ TTL  expr1 ]
   		name2  [ type2 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr2 ]  [ TTL  expr2 ],
  	 	 	... 
  	  	INDEX index_name1  expr1的 TYPE  TYPE1 (...) 粒度 值1 ,
   		 INDEX  index_name2  表达式2  TYPE  TYPE2 (...) 粒度 值2 
		) ENGINE  =ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/wt_order_details',
        		 '{replica}') 
		[ PARTITION  BY  EXPR ] 
		[ ORDER  BY  EXPR ] 
		[ PRIMARY  KEY  EXPR ] 
		[ 样品 BY  EXPR ] 
		[ SETTINGS  name = value, ...]
  • Memory

  1. 重新启动服务器时,表中的数据消失,表将变为空。通常,使用此表引擎是不合理的。(值得注意的是,在许多情况下,与 MergeTree 引擎的性能几乎一样高)。
  2. 锁范围小:读写操作不会相互阻塞。不支持索引。阅读是并行化的。
  3. 换句话说,从这张表中读取是很轻松的。并发数据访问是同步的。
  4. 以未压缩的形式将数据存储在内存中。数据完全以读取时获得的形式存储。
  • Distributed

  1. 分布式引擎本身不存储数据, 但可以在多个服务器上进行分布式查询。 读是自动并行的。
  2. 读取时,远程服务器表的索引(如果有的话)会被使用。
  3. 远程服务器不仅用于读取数据,还会对尽可能数据做部分处理。
  4. 分布式引擎参数:服务器配置文件中的集群名,远程数据库名,远程表名,数据分片键(可选)
  5. 样例:ENGINE  =Distributed(cluster, db, table[, sharding_key])
  • Kafka

  1. 自动跟踪传递的消息,因此组中的每条消息仅计算一次。如果要获取数据两次,则使用另一个组名创建表的副本。组是灵活的并在群集上同步
  2. 发布或订阅数据流。
  3. 组织容错存储。
  4. 处理流可用。
  • 建表样例:
    CREATE TABLE [IF NOT EXISTS] [db。] table_name [ON CLUSTER cluster]
    		(
        		name1 [type1] [DEFAULT | MATERIALIZED | ALIAS expr1],
       		 name2 [type2] [DEFAULT | MATERIALIZED | ALIAS expr2],
      			  ...
    		)ENGINE = Kafka()
    		设置
        		kafka_broker_list ='host:port',
      		kafka_topic_list ='topic1,topic2,...',
        		kafka_group_name ='group_name',
        		kafka_format ='data_format'[,]
       		[kafka_row_delimiter ='delimiter_symbol',]
        		[kafka_schema ='',]
        		[kafka_num_consumers = N,]
       		[kafka_skip_broken_messages = N]

    实例:

  1. CREATE TABLE ODS.table_name
        (`EventDate` Date, `CounterID` UInt32, `UserID` UInt32) 
         ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_name2', '{replica}') 
         PARTITION BY toYYYYMM(EventDate) 
         ORDER BY (CounterID, EventDate, intHash32(UserID)) 
         SAMPLE BY intHash32(UserID) 
         SETTINGS index_granularity = 8192
    

    注:8192:主键索引粒度   就是每隔8192个单位数据,是1个block,主键会每隔8192个单位,取主键列的数据,同时记录这是第几个block,查询的时候,如果有索引,就通过索引定位到是哪个block,然后找到这个block对应的数据文件

  2. mysql-clickhouse的json案例

  3. {
        "job": {
            "setting": {
                "speed": {
                     "channel": 3
                },
                "errorLimit": {
                    "record": 0,
                    "percentage": 0.02
                }
            },
            "content": [
                {
                    "reader": {
                        "name": "clickhousereader",
                        "parameter": {
                            "username": "aa",
                            "password": "bb",
                            "column": [
                                "EventDate",
                                "CounterID",
                                "UserID"
                            ],
                            "connection": [
                                {
                                    "table": [
                                        "table1"
                                    ],
                                    "jdbcUrl": [
                                        "jdbc:clickhouse://100.0.0.0:3306/database"
                                    ]
                                }
                            ]
                        }
                    },
                   "writer": {
                        "name": "clickhousewriter",
                        "parameter": {
                            "username": "aa",
                            "password": "bb",
                            "column": [
                                "EventDate",
                                "CounterID",
                                "UserID"
                            ],
                            "connection": [
                                {
                                    "jdbcUrl": "jdbc:clickhouse://170.0.0.0:8123/ODS",
                                    "table":["table2"]
                                }
                            ]
                }
            }
                }
            ]
        }
    }
    "speed": {
       "channel": 8,    ----并发数限速(根据自己CPU合理控制并发数)
       "byte": 524288,  ----字节流限速(根据自己的磁盘和网络合理控制字节数)
       "record": 10000  ----记录流限速(根据数据合理空行数)
    }
    
    

    最后的最后。。。。。

  • Clickhouse官网地址入口:https://clickhouse.yandex/docs/en/

  • DataX下载地址:https://github.com/alibaba/DataX

  • fistblood地址:https://github.com/hanson007/FirstBlood

你可能感兴趣的:(ClickHouse表常用引擎)