文章目录

  • 简介
  • 行列式存储
  • 官网测试链接
  • 数据类型
  • 整型
  • 浮点型
  • 布尔型
  • 字符串
  • 枚举类型
  • 数据组
  • 元组
  • 日期
  • 时间戳
  • 执行语句
  • 数据库操作
  • 库操作
  • 创建数据库
  • 表操作
  • 新建表
  • 新建MergeTree表
  • 新建复制表
  • 新增用例
  • 列插入
  • 查询用例
  • 修改用例
  • 删除用例
  • 分区
  • 查询分区信息
  • 删除分区
  • 复制分区数据
  • 清除分区的数据

简介

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。ClickHouse不单单是一个数据库, 它是一个数据库管理系统。

行列式存储

这里有个概念:行式和列式存储。

行式存储在磁盘中:

张三 22 学生 李四 24 软件工程师 王五 26 教师

列式存储在磁盘中:

张三 李四 王五 22 24 26 学生 软件工程师 教师

这样的存储结构就决定了列式存储在查询上的高效性。

clickhouse连接hive 查询不到数据 clickhouse where in_clickhouse

clickhouse连接hive 查询不到数据 clickhouse where in_数据_02

官网测试链接

在线demo编写

推荐使用数据库连接工具:DBeaver下载连接使用。

数据类型

整型

有符号整型(-2n-1~2n-1-1):

  • Int8 - [-128 : 127]
  • Int16 - [-32768 : 32767]
  • Int32 - [-2147483648 : 2147483647]
  • Int64 - [-9223372036854775808 : 9223372036854775807]

无符号整型范围(0~2n-1):

  • UInt8 - [0 : 255]
  • UInt16 - [0 : 65535]
  • UInt32 - [0 : 4294967295]
  • UInt64 - [0 : 18446744073709551615]
浮点型
  • Float32 - float
  • Float64 – double
布尔型

没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。

字符串
  • 变长字符串 String 字符串可以任意长度的。它可以包含任意的字节集,包含空字节。
  • 定长字符串 FixedString(N) 固定长度 N 的字符串(N 必须是严格的正自然数),类比varchar(255)
枚举类型
  • Enum8 用 ‘String’= Int8 对描述。
  • Enum16 用 ‘String’= Int16 对描述。值得注意的是:clickhouse里面的枚举类型只支持:String = Int,与之形成鲜明对应的是Java可以支持多种对应关系。
数据组
  • Array(T)

由 T 类型元素组成的数组。T可以是任意类型,但数组的数据类型均为同一类型数据。

元组
  • Tuple(T1, T2, …)

元组,其中每个元素都有单独的类型。

日期
  • Date

用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值, 最小值输出为0000-00-00。

时间戳
  • DateTime

用四个字节(无符号的)存储 Unix 时间戳,允许存储与日期类型相同的范围内的值。最小值为 0000-00-00 00:00:00,时间戳类型值精确到秒。

执行语句

ClickHouse严格区分大小写。

数据库操作

库操作

显示所有数据库

SHOW DATABASES;

显示库中的所有表

SHOW TABLES FROM datasets

显示表结构

DESCRIBE TABLE hits_100m_obfuscated

显示建表语句

SHOW CREATE TABLE hits_100m_obfuscated
--More detailed information about the table such as table engine, partition --schema etc can be obtained by

删除数据库

drop database  datasets;

查看当前使用的数据库

select currentDatabase();

创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
CREATE DATABASE IF NOT EXISTS cbry

表操作

新建表

需要指定表引擎ENGINE,表引擎决定了数据表的特性,也决定了数据将会被如何存储和加载。

值得注意的是,这里的TimyLog引擎:TinyLog 表用于小批量处理的中间数据。用于查询,不支持修改。此引擎适用于相对较小的表(建议最多1,000,000行)。如果您有许多小表,则使用此表引擎是适合的,因为它比Log引擎更简单(需要打开的文件更少)。

create table IF NOT EXISTS cbry.cbry_user(
    uid Int32,
    name String,
    age UInt32
)ENGINE = TinyLog;

新建MergeTree表

需要主键,排序字段( primary key , order by) 两个一致。

create table IF NOT EXISTS cbry.cbry_user(
    uid Int32,
    name String,
    age UInt32
)ENGINE = MergeTree()
PARTITION BY  uid
ORDER BY uid;

PARTITION BY — 分区键 。

要按月分区,可以使用表达式 toYYYYMM(date_column) ,这里的 date_column 是一个 Date 类型的列。分区名的格式会是 "YYYYMM" 。

新建复制表

CREATE TABLE IF NOT EXISTS [db.]table_name AS [db2.]name2 [ENGINE = engine]

新增用例

INSERT into cbry.cbry_user values(1,'cbry',22)

列插入

可以在查询中指定要插入的列的列表,如:[(c1, c2, c3)]。您还可以使用列匹配器的表达式,例如*和/或修饰符,例如 APPLY, EXCEPT, REPLACE。

INSERT INTO cbry.cbry_user (* EXCEPT(name)) Values (3, 24);

clickhouse连接hive 查询不到数据 clickhouse where in_基础操作_03

查询用例

SELECT * FROM cbry_user WHERE name= 'cbry' LIMIT 2;

修改用例

系统不支持的其他用于修改数据的查询:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。 但是,您可以使用 ALTER TABLE ... DROP PARTITION查询来删除一些旧的数据。

对建立的mergeTree引擎的表进行修改:

ALTER table cbry.cbry_user update name = 'cbry' WHERE age = 24

clickhouse连接hive 查询不到数据 clickhouse where in_用例_04

删除用例

drop tables cbry.cbry_user;
alter table cbry.cbry_user delete  where name in ('cbry','zhangsan');

分区

查询分区信息

SELECT  database, table, partition, partition_id, name, path FROM system.parts WHERE table = 'cbry_user'

clickhouse连接hive 查询不到数据 clickhouse where in_clickhouse_05

删除分区

alter table cbry.cbry_user drop partition 3;

分区存储的对应数据也会被删除

clickhouse连接hive 查询不到数据 clickhouse where in_用例_06

复制分区数据

将一张表的分区数据复制到另外一张表里面。

alter table cbry.cbry_user replace partition 1 from cbry.cbry_user ;

clickhouse连接hive 查询不到数据 clickhouse where in_入门_07

清除分区的数据

清空分区的数据

alter table cbry.cbry_user CLEAR column age in partition 1;

clickhouse连接hive 查询不到数据 clickhouse where in_clickhouse_08