ClickHouse入门

1、前言

ClickHouse is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).
ClickHouses是一个面向行的OLAP型DBMS

  ClickHouse最初是为为全球第二大网络分析平台Yandex.Metrica提供动力而开发的,并且仍然是这个系统的核心组件。
  ClickHouse的优势是使用了面向列的DBMS,比MySQL等面向行的数据库有查询优势,同时又比同样属于面向列DBMS的更有效的节省空间(不适用固定大小存储数据),使用数据压缩后,可以传输更多,延迟小等。

官网:https://clickhouse.yandex/

2、安装ClickHouse

  实际测试系统:ubuntu18.04 server

系统需求:Linux, x86_64 with SSE 4.2.
检测系统是否支持SSE4.2:

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

添加源,并安装

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4    # optional

echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list

sudo apt-get update

sudo apt-get install -y clickhouse-server clickhouse-client

sudo service clickhouse-server start 

clickhouse-client

ClickHouse的配置文件是在/etc/clickhouse-server下的config.xml中。
ClickHouse是推荐你更改path便签的路径的,我改成自己的/data路径,
然后更改拥有者,让ClickHouse用户组能访问和使用这个文件夹

chown -c clickhouse:clickhouse /data/

除了使用service命令访问ClickHouse服务,还可以用
/etc/init.d/clickhouse-server这二进制文件进行操作。

/etc/init.d/clickhouse-server start  //启动服务

/etc/init.d/clickhouse-server status //查看服务状态,我查询status的时候,总是stoped的,其实已经启动了

直接输入clickhouse-client进行本地访问。
clickhouse-client -m是多行命令行输入,遇到分号才会执行,没加-m默认认第一个分号之前的内容。

退出命令行:”exit”, “quit”, “logout”, “exit;”, “quit;”, “logout;”, “q”, “Q”, “:q”,输入这些字符其中之一就可以了。

3、连接工具

  • 最原始的工具算是ClickHouse-Client了
  • IDEA 2018.2.1之后,支持了ClickHouse数据源的支持,最新版的datagrip也支持
  • DBEAVER也支持ClickHouse数据源,但是呢一看界面就是eclipse的界面改版过来的,eclipse的gui真的有点不稳定,我只能这么说。
  • 官网推荐的两个web图形工具

4、数据类型

  • UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64
  • Float32, Float64
  • Boolean(不存在,使用 UInt8的0和1代替)
  • String(任意长度,代替VARCHAR, BLOB, CLOB,或者其他DBMS来的字符数据类型)
  • FixedString(N) (N bytes长度的字符串)
  • Date (日期,例如:1970-01-01 )
  • DateTime (日期时间,例如:1970-01-01 00:00:00)
  • Enum8, Enum16 (Enum8、Enum16 定义为键值对 ‘String’ = Int8 和 ‘String’ = Int16,例如:x Enum8(‘hello’ = 1, ‘world’ = 2))
  • Array(T) (数组,复合数据类型,例如:select [1, 2] AS x, toTypeName(x) ;)
  • Tuple(T1, T2, …) (元组,复合数据类型,例如:SELECT tuple(1,’a’) AS x, toTypeName(x) ;)
  • Nullable(TypeName) (没有值的时候填充null,TypeName不可复合数据类型,例如:CREATE TABLE t_null(x Int8,y Nullable(Int8)))

5、基础sql

我是在clickhouse-client下测试的,是否大小写敏感自己辨别。

5.1、数据库和表基本查询

  • 列出数据库:show databases;
  • 切换数据库:use 要切换的数据库;
  • 查看数据库表:show tables;

  • 查看建表语句:show create table 数据库表;

  • 查看数据库表字段:desc table 数据库表;

上面语句的语法与MySql的一模一样

5.2、建表语句

建表语句:

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

其中engine的语法规则:

ENGINE [=] MergeTree() [PARTITION BY expr] [ORDER BY expr] [SAMPLE BY expr] [SETTINGS name=value, ...]

新写法,官网推荐使用,MergeTree直接使用空参数。
还有一种写法是:

ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity)

官方不推荐这种老式写法
参数:

  • PARTITION BY (分区格式,如下面的toYYYYMMDD(dth),分区格式就为)
  • ORDER BY (列或任意表达式的元组)
  • SAMPLE BY (抽样表达式 (可选的). 例子: intHash32(UserID)).)
    例子:
CREATE TABLE user ( id Int32,  name String,  password String,  dth Date) ENGINE = MergeTree() PARTITION BY toYYYYMMDD(dth) ORDER BY id SETTINGS index_granularity = 8192 

5.3、增删改查

增改查方面不做赘述。基本跟mysql一致,查询方面有有些有特殊限制。

删除方面,ClickHouse只有某些engine支持删除。

你可能感兴趣的:(数据库,clickhouse)