分布式表一般用来查询,实际数据写入还是在本地式表
在操作分布式表之前:
1 连接到tutorial
数据库。
2 在MergeTree 引擎上创建hits_v1
表,该表将位于所有集群主机上:(ON CLUSTER表示在集群的每台机器上都创建)
CREATE TABLE tutorial.hits_v1 ON CLUSTER '{cluster}' ( <table structure> )
ENGINE = MergeTree()
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)
SETTINGS index_granularity = 8192
在集群中创建分布式表hits_v1_distributed
:
1 连接到tutorial
数据库。
2 在分布式引擎上创建一个表:
CREATE TABLE tutorial.hits_v1_distributed ON CLUSTER '{cluster}' AS tutorial.hits_v1
ENGINE = Distributed('{cluster}', tutorial, hits_v1, rand())
在这里,您可以使用AS tutorial.hits_v1
表达式,而不是显式指定表结构,因为hits_v1_distributed
和hits_v1
表位于集群中的相同主机上。
简而言之 就是创建分布式表不用显示的指示表结构,仿照本地表就可以了
创建分布式表时,指定集群ID 作为第一个参数或使用{cluster}宏,它会自动替换CREATE TABLE执行操作的集群ID 。
分布式表的4个参数
第一个 集群id
第二个 数据库名
第三个 本地表名
第四个 分片键 就是说写入数据时写入集群中的哪个本地表
一般不建议直接向分布式表写数据,最好是直接写入数据到对应的本地表,然后查询的时候使用分布式表