数据表

简介: 数据表

ClickHouse 数据表的定义语法,是在标准 SQL 的基础之上建立的。 ClickHouse 目前提供了三种最基本的建表方法,如下所示:


常规定义方法

常规定义方法的完整语法如下所示:

$ CREATE TABLE [IF NOT EXISTS] [db_name.]table_name (name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr], name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr], ...) ENGIN = engine点击复制复制失败已复制


使用 [db_name.] 参数可以为数据表指定数据库,如果不指定此参数,则会默认使用 default 数据库。例如执行下面的语句:

$ CREATE TABLE hits_v1 (
  Title String,
  URL String,
  EventTime DateTime
) ENGINE = Memory点击复制复制失败已复制


提示

注意末尾的 ENGINE 参数,它被用于指定数据表的引擎。


上述语句将会在 default 默认的数据库下创建一种内存表。表引擎决定了数据表的特性,也决定了数据将会被如何存储及加载。例如,示例中使用的 Memory 表引擎,是 ClickHouse 最简单的表引擎,数据只会被保存在内存中,在服务重启时数据会丢失。


复制定义方法

第二种定义方法是复制其他表的结构,具体语法如下所示:

$ CREATE TABLE [IF NOT EXISTS] [db_name1.]table_name1 AS [db_name2.]table_name2 [ENGINE = engine]点击复制复制失败已复制


这种方式支持在不同的数据库之间复制表结构,例如下面的语句:

-- 创建新的数据库
$ CREATE DATABASE IF NOT EXISTS new_db
-- 将default.hits_v1的结构复制到new_db.hits_v1
$ CREATE TABLE IF NOT EXISTS new_db.hits_v1 AS default.hits_v1 ENGINE = TinyLog点击复制复制失败已复制


上述语句将会把 default.hits_v1 的表结构原样复制到 new_db.hits_v1 ,并且 ENGINE 表引擎可以与原表不同。


SELECT 子句定义方法

第三种定义方法是通过 SELECT 子句的形式创建,它的完整语法如下:

$ CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ENGINE = engine AS SELECT ...点击复制复制失败已复制


在这种方式下,不仅会根据 SELECT 子句建立相应的表结构,同时还会将 SELECT 子句查询的数据顺序写入,例如执行下面的语句:

$ CREATE TABLE IF NOT EXISTS hits_v1_1 ENGINE = Memory AS SELECT * FROM hits_v1点击复制复制失败已复制


上述语句会将 SELECT * FROM hits_v1 的查询结果一并写入数据表。


其他操作

ClickHouse 和大多数数据库一样,使用 DESC 查询可以返回数据表的定义结构。如果想删除一张数据表,则可以使用下面的 DROP 语句:

$ DROP TABLE [IF EXISTS] [db_name.]table_name
目录
相关文章
|
6月前
|
搜索推荐
舒尔特表练习记
舒尔特表练习记 1 练习的开始
60 0
|
6月前
|
SQL 前端开发 关系型数据库
MYSQL基础之【创建数据表,删除数据表】
MYSQL基础之【创建数据表,删除数据表】
63 0
|
数据库
建表与数据准备
自己新建数据库:
30 0
|
SQL 数据库
数据表管理总结
数据表管理总结
|
存储 SQL 关系型数据库
|
消息中间件 安全 Dubbo
程序员健康作息表
程序员健康作息表
|
存储 索引
各种表
符号表 opcode代码中的操作数都是一个符号表中的索引, 在符号表中存储的是字符串, 方法名, 变量名, 变量值, 让虚拟机通过索引在符号表中获取真正的参数 字母表 在我们定义的脚本语言风格中用到的所有不可以再分的符号放到字母表中, 通过字母表中的单个字符组合出各式各样的单词
749 0
|
关系型数据库 PostgreSQL API