登录
1 | clickhouse-client -h m02 --port 9001 -u default --password default |
其中m02是集群中一个ip,9001 是相应端口,第一个default是账号,第二个default是密码。
查询集群信息
1 | select * from system.clusters; |
创建数据库
1 | # 本地库 |
创建表
分布式表
分布式表本身不存储数据,它只是将查询请求分发到集群中的各个节点上,并从这些节点上获取结果。因此,在创建分布式表之前,您需要确保集群中的每个节点都已经创建了相应的本地表,并且这些本地表的结构与分布式表一致。
在ClickHouse中实现分布式建表,通常需要使用ENGINE = Distributed引擎,并指定集群名称和本地表名称。以下是一个基本的分布式建表语句示例:
1 | CREATE TABLE distributed_table ON CLUSTER 'your_cluster_name' |
在这个语句中:
ON CLUSTER ‘your_cluster_name’:指定要在哪个集群上创建分布式表。
ENGINE = Distributed:指定使用Distributed引擎。
‘your_cluster_name’:集群的名称,必须与ClickHouse配置中的集群名称一致。
‘database_name’:本地表所在的数据库名称。
‘local_table_name’:本地表的名称,即数据实际存储的表的名称。
sharding_key:分片键,用于决定数据应该存储在哪个节点的本地表上。可以是表中的一列或多列。
集群上创建表
可以利用ON CLUSTER语句实现。以下是一个具体的示例,展示了如何在名为my_cluster的集群上创建一个表my_distributed_table
1 | CREATE TABLE my_distributed_table ON CLUSTER 'my_cluster' |
在这个示例中:
my_distributed_table:这是您希望创建的表的名称。
ON CLUSTER ‘my_cluster’:这个语句指明了您想在my_cluster这个集群的所有节点上都创建这个表。
表结构定义部分包括了三列:id(无符号32位整数)、name(字符串)和value(32位浮点数)。
ENGINE = MergeTree():选择了MergeTree作为表的存储引擎,这是ClickHouse中一种高效且常用的存储引擎。
ORDER BY id:指定了表的主键,ClickHouse会根据这个主键对数据进行排序。
当您在集群上执行这条建表语句时,ClickHouse会在集群的每个节点上都创建一个名为my_distributed_table的表,并且这些表的结构和定义都是相同的。这样,您就可以在集群上对这个表进行分布式查询和操作了。
请确保my_cluster这个集群已经在ClickHouse的配置中被正确定义,且集群中的各个节点都是可用的。否则,建表操作可能会失败。
普通表
基本的ClickHouse建表语句示例
1 | CREATE TABLE my_table |
在这个示例中:
my_table 是表的名称,您可以根据自己的需求进行命名。
表中有四列:id(无符号32位整数)、name(字符串类型)、age(无符号8位整数)和created_at(日期时间类型)。
ENGINE = MergeTree() 指定了使用MergeTree引擎,这是ClickHouse中最常用的存储引擎之一,适用于大多数场景。
ORDER BY id 指定了表的主键和排序键,ClickHouse会根据这个键对数据进行排序和存储。
如果想要创建一个带有分区的表,可以使用类似以下的语句:
1 | CREATE TABLE my_partitioned_table |
在这个示例中,PARTITION BY toYYYYMMDD(created_at) 指定了按照created_at字段的年月日进行分区。这样,ClickHouse可以根据分区来优化查询性能,提高数据访问速度。
插入数据
可以是分布式或者本地表
1 | insert into my_clustertable( id,name,age) values (1,'tom',11); |
删除数据
1 | alter table my_clustertable delete where 1=1; |