clickhouse--SQL語法


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引擎。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM