clickhouse的数据操作
数据库起到了命名空间的作用,可以有效的规避命名冲突,也为后续的数据隔离提供了支撑,表隶属于某个数据库之下。创建数据库的完整语法:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]IF NOT EXISTS:若存在一个同名的库则忽略后续的创建过程。若不存在则创建库名。
[ON CLUSTER cluster]:基于clickhouse集群创建表
[ENGINE = engine(...)]:表示数据库所使用的引擎类型。Ordinary:默认引擎,在绝大多数情况下我们都会使用默认的存储引擎,无须指定声明。在此数据库引擎下可以使用任意类型的表引擎。
Dictionary:字典引擎,此类数据库会自动为所有数据字典创建他们的数据表。
Memory:内存引擎,用于存放临时数据。此类数据库下的数据表只会驻留在内存中,不会涉及任务磁盘操作,当服务重启数据会被清除。
Lazy:日志引擎,此类数据库引擎下只能使用Log系列的表引擎。
MySQL:MySQL引擎,此类数据库下会自动拉取远端的MySQL中的数据,并为他们创建MySQL中标引擎的数据表。示例:
Clickhouse> create database if not exists clickhouse_db;CREATE DATABASE IF NOT EXISTS clickhouse_dbOk.0 rows in set. Elapsed: 0.002 sec.
默认的数据库是磁盘上的一个文件目录,执行创建之后可以在数据目录下创建文件:# ls -l /var/lib/clickhouse/data/
total 0
drwxr-x---. 2 clickhouse clickhouse 6 Jun 27 16:41 clickhouse_db
drwxr-x---. 4 clickhouse clickhouse 38 Jun 27 13:44 datasets
drwxr-x---. 2 clickhouse clickhouse 6 Jun 23 02:34 default
drwxr-x---. 4 clickhouse clickhouse 41 Jun 23 02:34 system可以看相关的元数据:
# ls -l /var/lib/clickhouse/metadata
total 12
drwxr-x---. 2 clickhouse clickhouse 6 Jun 27 16:41 clickhouse_db
-rw-r-----. 1 clickhouse clickhouse 48 Jun 27 16:41 clickhouse_db.sql
drwxr-x---. 2 clickhouse clickhouse 46 Jun 27 13:44 datasets
-rw-r-----. 1 clickhouse clickhouse 43 Jun 23 03:07 datasets.sql
drwxr-x---. 2 clickhouse clickhouse 6 Jun 23 02:34 default
-rw-r-----. 1 clickhouse clickhouse 42 Jun 23 02:34 default.sql
drwxr-x---. 2 clickhouse clickhouse 49 Jun 23 02:34 system语句:
# cat clickhouse_db.sql
ATTACH DATABASE clickhouse_db
ENGINE = Ordinary可以看到数据库的ENGINE 默认是Ordinary。-- 查看数据库:
Clickhouse> show databases;SHOW DATABASES┌─name───────────────────────────┐
│ _temporary_and_external_tables │
│ clickhouse_db │
│ datasets │
│ default │
│ system │
└────────────────────────────────┘5 rows in set. Elapsed: 0.003 sec. -- 查看创建数据库的语句:
Clickhouse> show create database clickhouse_db \GSHOW CREATE DATABASE clickhouse_dbRow 1:
──────
statement: CREATE DATABASE clickhouse_db
ENGINE = Ordinary1 rows in set. Elapsed: 0.002 sec. -- 删除数据库:Clickhouse> drop database if exists clickhouse_db;DROP DATABASE IF EXISTS clickhouse_dbOk.0 rows in set. Elapsed: 0.001 sec.