登 录
注 册
< 数 据 库
MySQL
ClickHouse
ES
Doris
MongoDB
Redis
其他DB
ClickHouse介绍
单机部署
客户端访问
数据定义
MergeTree引擎
表引擎-外部存储
表引擎-内存类型
表引擎-其他类型
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
ClickHouse
>>
数据定义
数据定义
2020-10-07 15:17:50 星期三 阅读:6144
####数据类型 | 基本类型 | 复合类型 | | ------------ | ------------ | | 数值 | 数组 | | 字符串 | 元组(Tuple) | | 时间 | 枚举 | ||嵌套(Nested)| 特殊类型 Nullable:经过Nullable修饰的字段可以被写入null值(尽量便面使用Nullable类型,会降低查询性能) Domain:域名类型(其实就是基于整型和字符串的进一步封装) ####创建数据库 创建语句 ```CREATE DATABASE IF NOT EXISTS db_name [ENGINE = engine]``` 数据库支持的引擎 `Ordinary`:默认引擎,在绝大多数情况下我们都会使用默认引擎,使用时无须刻意声明。在此数据库下可以使用任意类型的表引擎。 `Dictionary`:字典引擎,此类数据库会自动为所有数据字典创建它们的数据表,关于数据字典的详细介绍会在第5章展开。 `Memory`:内存引擎,用于存放临时数据。此类数据库下的数据表只会停留在内存中,不会涉及任何磁盘操作,当服务重启后数据会被清除。 `Lazy`:日志引擎,此类数据库下只能使用Log系列的表引擎,关于Log表引擎的详细介绍会在第8章展开。 `MySQL`:MySQL引擎,此类数据库下会自动拉取远端MySQL中的数据,并为它们创建MySQL表引擎的数据表,关于MySQL表引擎的详细介绍会在第8章展开。 实际上一个数据库对应的是底层操作系统的一个文件目录。 ####创建表 clickhouse提供了三种创建表的方法 常规定义法 ``` CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ( name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr], name2 [type] [DEFAULT|MATERIALIZED|ALIAS expr], 省略… ) ENGINE = engine ``` 复制其他表结构 ``` CREATE TABLE [IF NOT EXISTS] [db_name.]table_name as [dbname.]table_name2 [ENGINE=engine] ``` 通过select方式创建,这种方式会将表结构和数据都复制到新表 ``` CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ENGINE = engine AS SELECT … ``` ####表的类型 临时表 创建普通表时增加TEMPORARY关键字,临时表不属于任何数据库,如果同时查询临时表和普通表,会优先读取临时表的数据 分区表 只有合并数(MergeTree)家族系列的表引擎才支持创建分区表 ``` CREATE TABLE partition_v1 ( ID String, URL String, EventTime Date ) ENGINE = MergeTree() PARTITION BY toYYYYMM(EventTime) ORDER BY ID ``` 视图 视图又分为普通视图和物化视图两种 普通视图不会存储任何数据,只是单纯的将select查询映射,物化视图则相反,且支持表引擎 ####表操作 其他操作类型(增加列、删除列、增加备注等)都跟hive和MySQL大同小异,这里记录一个比较特殊的操作 移动数据表——RENAME关键字 不仅可以重命名表名,还可以移动表的位置(比如从A库移动到B库)如果移动前后两个库的库名相同,则相当于表重命名,类似于Linux mv命令的作用 `RENAME TABLE db1.table1 TO db2.table2` ####分区的卸载与装载 分区被卸载后,它的物理数据并没有删除,而是被转移到了当前数据表目录的detached子目录下。而装载分区则是反向操作,它能够将detached子目录下的某个分区重新装载回去。 一旦分区被移动到了detached子目录,就代表它已经脱离了ClickHouse的管理,ClickHouse并不会主动清理这些文件。 ####分布式DDL执行 将一条普通的DDL语句转换成分布式执行十分简单,只需加上ON CLUSTER cluster_name声明即可。该声明可以对集群内的所有节点广播这条DDL语句 ``` CREATE TABLE partition_v3 ON CLUSTER ch_cluster( ID String, URL String, EventTime Date ) ENGINE = MergeTree() PARTITION BY toYYYYMM(EventTime) ORDER BY I ``` ####数据的删除与修改 行级别删除与更新时很“重”的操作(把原来的数据复制一份到新的数据目录,删除和更新后,再把原来的数据目录下线,使用新的数据目录),因此更适用于批量数据的修改和删除。其次不支持事务,也就是说,如果更新失败,则不会回滚。 ``` # 删除数据 ALTER TABLE db_name.table_name DELETE WHERE filter_expr; # 更新数据 ALTER TABLE db_name.table_name UPDATE url="xxx", os="bbb" WHERE id in(1,2,3); ```