个人学习笔记,谢绝转载!!!
原文:https://www.cnblogs.com/wshenjin/p/13068122.html
ClickHouse不支持的修改数据的查询:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。
建库删库
CREATE DATABASE [IF NOT EXISTS] db_name;
DROP DATABASE [IF EXISTS] db_name;
建表删表
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 – 别名。
localhost :) CREATE TABLE t1 (ID UInt16,Name String, Birth Date) engine=TinyLog;
创建相同表结构:
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
localhost :) CREATE TABLE t2 AS t1 ENGINE = Memory;
查看表结构:
SHOW CREATE TABLE tb_name;
DESCRIBE TABLE tb_name;
DESC tb_name;
localhost :) SHOW CREATE TABLE t1;
┌─statement──────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE testdb.t1 (`ID` UInt16, `Name` String, `Birth` Date) ENGINE = TinyLog │
└────────────────────────────────────────────────────────────────────────────────────┘
localhost :) DESC t2;
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ ID │ UInt16 │ │ │ │ │ │
│ Name │ String │ │ │ │ │ │
│ Birth │ Date │ │ │ │ │ │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
插入数据
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
localhost :) INSERT INTO t1 VALUES(1,'a','2020-02-02'),(2,'b','2020-03-03')(3,'c','2020-04-04');
INSERT INTO .... SELECT :
localhost :) INSERT INTO t2 SELECT * FROM t1;
localhost :) SELECT * FROM t2;
┌─ID─┬─Name─┬──────Birth─┐
│ 1 │ a │ 2020-02-02 │
│ 2 │ b │ 2020-03-03 │
│ 3 │ c │ 2020-04-04 │
└────┴──────┴────────────┘
修改表结构
ALTER只支持MergeTree、Merge和Distributed引擎的表
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
- ADD COLUMN – 向表中添加新列
- DROP COLUMN – 在表中删除列
- MODIFY COLUMN – 更改列的类型
先新建一张MergeTree表并插入数据
localhost :) CREATE TABLE t3 (ID UInt16,Name String, Birth Date) engine=MergeTree(Birth, (ID, Name), 8192);
localhost :) INSERT INTO t3 SELECT * FROM t1;
添加一个Age字段
localhost :) ALTER TABLE t3 ADD COLUMN Age UInt8;
localhost :) DESC t3;
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ ID │ UInt16 │ │ │ │ │ │
│ Name │ String │ │ │ │ │ │
│ Birth │ Date │ │ │ │ │ │
│ Age │ UInt8 │ │ │ │ │ │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
localhost :) SELECT * FROM t3;
┌─ID─┬─Name─┬──────Birth─┬─Age─┐
│ 2 │ b │ 2020-03-03 │ 0 │
└────┴──────┴────────────┴─────┘
┌─ID─┬─Name─┬──────Birth─┬─Age─┐
│ 1 │ a │ 2020-02-02 │ 0 │
└────┴──────┴────────────┴─────┘
┌─ID─┬─Name─┬──────Birth─┬─Age─┐
│ 3 │ c │ 2020-04-04 │ 0 │
└────┴──────┴────────────┴─────┘
修改字段类型
localhost :) ALTER TABLE t3 MODIFY COLUMN Age UInt16;
localhost :) DESC t3;
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ ID │ UInt16 │ │ │ │ │ │
│ Name │ String │ │ │ │ │ │
│ Birth │ Date │ │ │ │ │ │
│ Age │ UInt16 │ │ │ │ │ │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
删除字段
localhost :) ALTER TABLE t3 DROP COLUMN Age;
localhost :) DESC t3;
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ ID │ UInt16 │ │ │ │ │ │
│ Name │ String │ │ │ │ │ │
│ Birth │ Date │ │ │ │ │ │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
数据导入导出
导出CSV:
[root@ ~]# clickhouse-client --password 123456 --database testdb --query="select * from t1 format CSV;" > t.csv
[root@ ~]# echo "select * from t1 format CSV" | clickhouse-client --password 123456 --database testdb > t.csv
从CSV导入:
[root@ ~]# cat t.csv | clickhouse-client --password 123456 --database testdb --query="insert into t1 FORMAT CSV"
[root@ ~]# clickhouse-client --password 123456 --database testdb --query="insert into t1 FORMAT CSV" < t.csv
--format_csv_delimiter="|" ,指定导入导出的分隔符
参考
https://www.jianshu.com/p/74eb7747210a
https://www.cnblogs.com/dflmg/p/11464748.html