ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

clickhouse--SQL语法

2021-07-06 19:35:05  阅读:258  来源: 互联网

标签:default name -- mt SQL table type id clickhouse


SQL语法

CREATE

CREATE DATABASE

用于创建指定名称的数据库,语法如下:

CREATE DATABASE [IF NOT EXISTS] db_name

如果查询中存在IF NOT EXISTS,则当数据库已经存在时,该查询不会返回任何错误。

:) create database test;

 

Ok.

 

0 rows in set. Elapsed: 0.018 sec.

CREATE TABLE

对于创建表,语法如下:

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]

(

  name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],

  name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],

  ...

) ENGINE = engine

DEFAULT expr – 默认值,用法与SQL类似。

MATERIALIZED expr – 物化表达式,被该表达式指定的列不能被INSERT,因为它总是被计算出来的。 对于INSERT而言,不需要考虑这些列。 另外,在SELECT查询中如果包含星号,此列不会被查询。

ALIAS expr – 别名。

有三种方式创建表:

1)直接创建

:) create table t1(id UInt16,name String) engine=TinyLog

2)创建一个与其他表具有相同结构的表

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

可以对其指定不同的表引擎声明。如果没有表引擎声明,则创建的表将与db2.name2使用相同的表引擎。

:) create table t2 as t1 engine=Memory

 

:) desc t2

 

DESCRIBE TABLE t2

 

┌─name─┬─type───┬─default_type─┬─default_expression─┐

│ id  │ UInt16 │        │           │

│ name  │ String │        │           │

└──────┴────────┴──────────────┴────────────────────┘

3)使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。

语法:

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

实例:

先在t2中插入几条数据

:) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')

 

:) create table t3 engine=TinyLog as select * from t1

:) select * from t3

┌─id─┬─name─────┐

│  1 │ zhangsan │

│  2 │ lisi   │

│  3 │ wangwu  │

└────┴──────────┘

INSERT INTO

主要用于向表中添加数据,基本格式如下:

INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
实例:

:) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')

还可以使用select来写入数据:

INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

​	实例:

:) insert into t2 select * from t3

:) select * from t2

 

┌─id─┬─name─────┐

│  1 │ zhangsan │

│  2 │ lisi   │

│  3 │ wangwu  │

└────┴──────────┘

ClickHouse不支持的修改数据的查询:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。

ALTER

ALTER只支持MergeTree系列,Merge和Distributed引擎的表,基本语法:

ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...

参数解析:

ADD COLUMN – 向表中添加新列

DROP COLUMN – 在表中删除列

MODIFY COLUMN – 更改列的类型

案例演示:

1)创建一个MergerTree引擎的表

create table mt_table (date Date, id UInt8, name String) ENGINE=MergeTree(date, (id, name), 8192);

2)向表中插入一些值

insert into mt_table values ('2019-05-01', 1, 'zhangsan');

insert into mt_table values ('2019-06-01', 2, 'lisi');

insert into mt_table values ('2019-05-03', 3, 'wangwu');

3)在末尾添加一个新列age

:)alter table mt_table add column age UInt8

:)desc mt_table

┌─name─┬─type───┬─default_type─┬─default_expression─┐

│ date │ Date  │        │           │

│ id  │ UInt8  │        │           │

│ name │ String │        │           │

│ age  │ UInt8  │        │           │

└──────┴────────┴──────────────┴────────────────────┘

:) select * from mt_table

┌───────date─┬─id─┬─name─┬─age─┐

│ 2019-06-01 │  2 │ lisi │  0 │

└────────────┴────┴──────┴─────┘

┌───────date─┬─id─┬─name─────┬─age─┐

│ 2019-05-01 │  1 │ zhangsan │  0 │

│ 2019-05-03 │  3 │ wangwu  │  0 │

└────────────┴────┴──────────┴─────┘

4)更改age列的类型

:)alter table mt_table modify column age UInt16

:)desc mt_table

 

┌─name─┬─type───┬─default_type─┬─default_expression─┐

│ date │ Date  │        │           │

│ id  │ UInt8  │        │           │

│ name │ String │        │           │

│ age  │ UInt16 │        │           │

└──────┴────────┴──────────────┴────────────────────┘

5)删除刚才创建的age列

:)alter table mt_table drop column age

:)desc mt_table

┌─name─┬─type───┬─default_type─┬─default_expression─┐

│ date │ Date  │        │           │

│ id  │ UInt8  │        │           │

│ name │ String │        │           │

└──────┴────────┴──────────────┴────────────────────┘

DESCRIBE TABLE

查看表结构

:)desc mt_table

┌─name─┬─type───┬─default_type─┬─default_expression─┐

│ date │ Date  │        │           │

│ id  │ UInt8  │        │           │

│ name │ String │        │           │

└──────┴────────┴──────────────┴────────────────────┘

CHECK TABLE

检查表中的数据是否损坏,他会返回两种结果:

0 – 数据已损坏

1 – 数据完整

该命令只支持Log,TinyLog和StripeLog引擎。

标签:default,name,--,mt,SQL,table,type,id,clickhouse
来源: https://www.cnblogs.com/wyh-study/p/14978507.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有