clickhouse

文章目录

    • 在线体验平台
    • 概念
      • 引擎
        • 库引擎
        • 表引擎
          • 合并树
            • *** MergeTree
            • ReplacingMergeTree
          • 日志
            • TinyLog
          • 集成引擎
          • 特定功能
      • 存储原理
        • 数据复制
        • system.processes表
      • 数据类型
    • 部署
      • 安装验证
      • 集群
        • 数据副本
        • 分布式表
      • 连接
    • 常用语句
        • CREATE 创建
        • ALTER
        • SHOW 查看
        • INSERT INTO 导入数据
        • 删除 DROP、TRUNCATE、DETACH
        • KILL
      • 函数
        • 表函数
        • 聚合函数
    • 客户端
      • cli
      • 在线web页面:Tabix
      • http
      • mysql驱动

在线体验平台

https://play.clickhouse.com/play?user=play

show databases
show tables from 
select * from .

clickhouse_第1张图片

概念

https://clickhouse.com/docs/zh/getting-started/tutorial

列式数据库
OLAP离线数据处理

数据库

列、列数据类型

引擎

库引擎
  • atomic
    默认
  • mysql
    相当于代理访问mysql
表引擎
合并树

高负载,通用,功能强大

*** MergeTree

存储的数据按主键排序。
可以使用分区
支持数据副本
支持数据采样

ReplacingMergeTree

在MergeTree基础上 会去重,删除排序值的重复项 (只保证最终一致,非强一致)

日志

轻量、最小功能、没有索引

TinyLog
集成引擎

集成其他数据库的访问。

特定功能
  • 分布式

存储原理

表=目录
列=文件

数据复制
system.processes表

包含有当前正在处理的请求列表

数据类型

https://clickhouse.com/docs/zh/sql-reference/data-types

部署

单机性能不差(占用cpu资源多、建议单机单应用)
集群部署简单

  • k8s单机部署参考
    https://blog.csdn.net/xyc1211/article/details/131814602

安装验证

$ curl 'http://localhost:8123/'
Ok.
$ curl 'http://localhost:8123/ping'
Ok.
$ curl 'http://localhost:8123/replicas_status'
Ok.

集群

集群部署,主要支持 数据副本与分布式表

  • 采用zookeeper作为集群协调
数据副本

每种引擎都有它的 Replcated引擎

副本是表级别的
一份数据可配置多个副本
没有主从关系

步骤:

  1. 集群部署ck,zk配置集群
  2. 每个节点都 创建表 用Replcated引擎(声明zk路径、备份名称)
  3. 任意节点写入数据,zk后台自动同步
  4. 所以节点都能查询
分布式表

水平切分表,存储在不同节点
分布式会降低查询速度,增加管理成本
Distributed引擎:相当于分片代理。不存储数据,转发请求,组装数据

步骤

  1. 配置集群,集群下n个分片shard,分片下n个副本replica 的ip端口
  2. 创建 分片表 【ON CLUSTER】,每个节点都会有表
  3. 创建 分布式表 Distributed引擎(本地分片表名,分片键)
  4. 通过分布式表插入数据,会自动根据分片键映射 插入对应节点的分片表
  5. 通过分布式表查询数据,会自动汇总各个节点的分片表数据
  6. 分布式表本身不存储数据

连接

clickhouse 支持3种连接方式,分别使用不同端口,

  1. 原生tcp默认端口[9000]、
  2. MySQL默认端口[9004]、
  3. Http默认端口[8123]

默认用户:default
默认密码:无

常用语句

默认情况下,CREATE、DROP、ALTER和RENAME查询仅影响执行它们的当前服务器。
在集群设置中,可以使用ON CLUSTER子句以分布式方式运行此类查询。

CREATE 创建
# 建库
CREATE DATABASE [IF NOT EXISTS] db_name
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]



# 建表
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = engine

# 在cluster集群的所有节点上创建名
CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits)


  • ON CLUSTER
    ClickHouse在指定集群的所有服务器上执行
# 添加表:假定数据已经在对应位置存放,将与表相关的信息添加到服务器
ATTACH TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
ALTER

ALTER 仅支持 *MergeTree ,Merge以及Distributed等引擎表。

# 改变表结构:
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...
# ADD COLUMN — 添加列
# DROP COLUMN — 删除列
# CLEAR COLUMN — 重置列的值
# COMMENT COLUMN — 给列增加注释说明
# MODIFY COLUMN — 改变列的值类型,默认表达式以及TTL
SHOW 查看
# 库
SHOW DATABASES [INTO OUTFILE filename] [FORMAT format]
# 表
SHOW TABLES
# 权限
SHOW GRANTS

# 输出 system.processes表的内容
SHOW PROCESSLIST

# 创建指定对象的 CREATE 语句。返回单个字符串类型的 ‘statement’列
SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMAT format]
  • CHECK TABLE
# 检查表中的数据是否已损坏。
CHECK TABLE [db.]name
  • DESCRIBE TABLE
# 查看表的描述信息,返回各列的Schema,语法如下:
DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
INSERT INTO 导入数据
# 数据插入
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...

# 使用SELECT的结果写入
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

# 从文件向表中插入数据
INSERT INTO [db.]table [(c1, c2, c3)] FROM INFILE file_name [COMPRESSION type] FORMAT format_name

# 插入表函数
INSERT INTO [TABLE] FUNCTION table_func ...


删除 DROP、TRUNCATE、DETACH
# 删库
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
# 删表
DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]

# 删除表中的所有数据
TRUNCATE TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]

# (假删)删除目标表信息,可通过 ATTACH 查询来重新关联该表
DETACH TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
KILL
WATCH Statement (Experimental)

# 显示语句的执行计划。
EXPLAIN Statement

# 强制终止当前正在运行的语句
KILL QUERY [ON CLUSTER cluster]
  WHERE <where expression to SELECT FROM system.processes query>
  [SYNC|ASYNC|TEST]
  [FORMAT format]
SET param = value

函数

表函数
聚合函数

客户端

cli

  • 交互模式
# 连接 
clickhouse-client
# 连接参数
-m :多行作为一行输入
  • 非交互(批处理)模式
# 执行query
clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV";

# 带参数查询
clickhouse-client --param_parName="[1, 2]"  -q "SELECT * FROM table WHERE a = {parName:Array(UInt16)}"

在线web页面:Tabix

https://github.com/tabixio/tabix

http

能通过http请求直接查询

curl 'http://localhost:8123/'

curl 'http://localhost:8123/?query=SELECT%201'

wget -nv -O- 'http://localhost:8123/?query=SELECT 1'

mysql驱动

支持mysql驱动连接clickhouse

协议上兼容,

有些语法不兼容,会报错

你可能感兴趣的:(中间件,DB,大数据,clickhouse)