ClickHouse SQL操作

目录

1.CREATE

1.1 CREATE DATABASE

1.2 CREATE TABLE

2.INSERT INTO

3.Update 和 Delete

4.SELECT 操作

5. ALTER 操作

6.DESCRIBE TABLE


    基本上来说传统关系型数据库(以MySQL为例)的SQL语句,基本支持但是也有不一样的地方, 这里主要介绍Clickhouse与标准SQL(MySQL)不一致的地方。 

1.CREATE

1.1 CREATE DATABASE

    用于创建指定名称的数据库,语法如下:CREATE DATABASE [IF NOT EXISTS] db_name

1.2 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使用相同的表引擎。

3)使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...

2.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

3.Update 和 Delete

    ClickHouse提供了Delete 和Update的能力,这类操作被称为Mutation查询,它可以看做Alter 的一种。

    虽然可以实现修改和删除,但是和一般的OLTP数据库不一样,Mutation语句是一种很“重”的操作,而且不支持事务。

    “重”的原因主要是每次修改或者删除都会导致放弃目标数据的原有分区,重建新分区。所以尽量做批量的变更,不要进行频繁小数据的操作。

// 删除操作
alter table t_order_smt delete where sku_id ='sku_001';

// 修改操作
alter table t_order_smt update total_amount=toDecimal32(2000.00,2) where id =102;

// 由于操作比较“重”,所以 Mutation语句分两步执行,同步执行的部分其实只是进行新增数据新增分区和并把旧分区打上逻辑上的失效标记。知道触发分区合并的时候,才会删除旧数据释放磁盘空间。

4.SELECT 操作

   clickhouse基本上与标准SQL 差别不大。

   支持子查询

   支持CTE(with 子句)

   支持各种JOIN, 但是JOIN操作无法使用缓存,所以即使是两次相同的JOIN语句,Clickhouse也会视为两条新SQL。

   不支持窗口函数。

   不支持自定义函数。

   GROUP BY 操作增加了 with rollup\with cube\with total 用来计算小计和总计。

create table t_order_mt(
    id UInt32,
    sku_id String,
    total_amount Decimal(16,2),
    create_time  Datetime
 ) engine = MergeTree
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id);

insert into  t_order_mt values(101,'sku_001',1000.00,'2020-08-01 12:00:00’);
insert into  t_order_mt values(102,'sku_002',2000.00,'2020-08-01 12:00:00');
insert into  t_order_mt values(103,'sku_004',2500.00,'2020-08-01 12:00:00');
insert into  t_order_mt values(104,'sku_002',2000.00,'2020-08-01 12:00:00');
insert into  t_order_mt values(105,'sku_003',600.00,'2020-08-02 12:00:00’);
insert into  t_order_mt values(105,'sku_004',600.00,'2020-08-02 12:00:00');
insert into  t_order_mt values(106,'sku_001',1000.00,'2020-08-04 12:00:00');
insert into  t_order_mt values(107,'sku_002',2000.00,'2020-08-04 12:00:00');
insert into  t_order_mt values(108,'sku_004',2500.00,'2020-08-04 12:00:00');
insert into  t_order_mt values(109,'sku_002',2000.00,'2020-08-04 12:00:00');
insert into  t_order_mt values(110,'sku_003',600.00,'2020-08-01 12:00:00');

// with rollup : 从右至左去掉维度进行小计。
 
select id , sku_id,sum(total_amount) from  t_order_mt group by id,sku_id with rollup;

// with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计。
select id , sku_id,sum(total_amount) from  t_order_mt group by id,sku_id with cube;

// with totals: 只计算合计。
select id , sku_id,sum(total_amount) from  t_order_mt group by id,sku_id with totals;

5. ALTER 操作

// ALTER只支持MergeTree系列,Merge和Distributed引擎的表,基本语法:ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...

// 参数解析:
   ADD COLUMN – 向表中添加新列
   DROP COLUMN – 在表中删除列
   MODIFY COLUMN – 更改列的类型

// 案例演示:
   新增字段:alter table tableName  add column  newcolname  String after col1
   修改字段类型:alter table tableName  modify column  newcolname  String;
   删除字段:alter table tableName  drop column  newcolname;

6.DESCRIBE TABLE

// 查看表结构
hadoop102 :) desc dis_table;
DESCRIBE TABLE dis_table
┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ id   │ UInt16 │              │                    │         │                  │                │
│ name │ String │              │                    │         │                  │                │
└──────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
2 rows in set. Elapsed: 0.001 sec.

你可能感兴趣的:(#,ClickHouse,clickhouse)