与数据库相比,创建表的语法要复杂得多(请参阅参考资料。通常,CREATE TABLE语句必须指定三个关键事项:
要创建的表的名称。表模式,即列及其数据类型的列表。表引擎及其设置,它确定有关如何物理执行对该表的查询的所有详细信息。CREATE/ATTACH DATABASE zabbix ENGINE = Ordinary;
ATTACH 也可以建库,但是metadata目录下不会生成.sql文件,一般用于metadata元数据sql文件被删除后,恢复库表结构使用
案例
CREATE TABLE IF NOT EXISTS database.table_name ON cluster cluster_shardNum_replicasNum( 'id' UInt64, 'name' String, 'time' UInt64, 'age' UInt8, 'flag' UInt8 ) ENGINE = MergeTree PARTITION BY toDate(time/1000) ORDER BY (id,name) SETTINGS index_granularity = 8192CREATE TABLE test02( id UInt16,col1 String,col2 String,create_date date ) ENGINE = MergeTree(create_date, (id), 8192); ENGINE:是表的引擎类型,
MergeTree:最常用的,MergeTree要求有一个日期字段,还有主键。Log引擎没有这个限制,也是比较常用。ReplicatedMergeTree:MergeTree的分支,表复制引擎。Distributed:分布式引擎。create_date:是表的日期字段,一个表必须要有一个日期字段。id:是表的主键,主键可以有多个字段,每个字段用逗号分隔。8192:是索引粒度,用默认值8192即可。CREATE TABLE distributed_table AS table ENGINE = Distributed(cluster, db, table, rand());
cluster:配置文件中的群集名称。
db:库名。
table:本地表名。
rand():分片方式:随机。
intHash64():分片方式:指定字段做hash。
Distribute引擎会选择每个分发到的Shard中的”健康的”副本执行SQL
如果想按集群操作,需要借助zookeeper,在config.xml中添加配置
<distributed_ddl> <path>/clickhouse/task_queue/ddl</path> </distributed_ddl>
一个节点创建表,会同步到各个节点
CREATE TABLE db.table [ON CLUSTER cluster] (...)
ALTER TABLE [db].table [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
rename 支持*MergeTree和Distributed
rename table db.table1 to db.table2 [ON CLUSTER cluster]
truncate table db.table;不支持Distributed引擎
ALTER TABLE [db.]table DELETE WHERE filter_expr...
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE ...
按时间分区:
toYYYYMM(EventDate):按月分区
toMonday(EventDate):按周分区
toDate(EventDate):按天分区
按指定列分区:
PARTITION BY cloumn_name
对分区的操作:
alter table test1 DROP PARTITION [partition] #删除分区
alter table test1 DETACH PARTITION [partition]#下线分区
alter table test1 ATTACH PARTITION [partition]#恢复分区
alter table .test1 FREEZE PARTITION [partition]#备份分区
insert into db.table select * from remote('目标IP',db.table,'user','passwd')
csv文件导入clickhousecat test.csv | clickhouse-client -u user --password password --query="INSERT INTO db.table FORMAT CSV"
同步mysql库中表CREATE TABLE tmp ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('hostip:3306', 'db', 'table', 'user', 'passwd') ;
4) clickhouse-copier 工具
select toUnixTimestamp('2018-11-25 00:00:02');
select toDateTime(1543075202);