001.clickhouse-创建分布式表
https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_24204.html
clickhouse登录-多行模式
clickhouse-client --host=x.x.x.x --port=9000 --user=xxxx --password=xxxx -mn
clickhouse 分普通表创建
CREATE TABLE default.tmp_ads_tr_order_info ( id Int64 comment '订单id ' ,tenant_id Int64 comment '租户ID ' ,instance_id Nullable(Int64) comment '实例id ' ,delivery_fee_amount Nullable(Decimal(18,2)) COMMENT '配送费' ,commision_amount Nullable(Decimal(18,2)) COMMENT '平台佣金' ,receiver_address Nullable(String) COMMENT '配送地址' ,remark Nullable(String) COMMENT '备注' ,dt Int32 ) ENGINE = MergeTree PARTITION BY dt ORDER BY (tenant_id, dt) SETTINGS index_granularity = 8192
clickhouse 分布式表操作
1. -- 创建新的本地表 _local -- 注意: -- ReplicatedMergeTree引擎族接收两个参数: -- ZooKeeper中该表相关数据的存储路径。 -- 该路径必须在/clickhouse目录下,否则后续可能因为ZooKeeper配额不够导致数据插入失败。 -- 为了避免不同表在ZooKeeper上数据冲突,目录格式必须按照如下规范填写: -- /clickhouse/tables/{shard}/default/test,其中/clickhouse/tables/{shard}为固定值,default为数据库名,test为创建的表名。 -- 副本名称,一般用{replica}即可。 CREATE TABLE IF NOT EXISTS tmp_ads_tr_order_info_local ON CLUSTER default_cluster( id Int64 comment '订单id ' ,tenant_id Int64 comment '租户ID ' ,instance_id Nullable(Int64) comment '实例id ' ,delivery_fee_amount Nullable(Decimal(18,2)) COMMENT '配送费' ,commision_amount Nullable(Decimal(18,2)) COMMENT '平台佣金' ,receiver_address Nullable(String) COMMENT '配送地址' ,remark Nullable(String) COMMENT '备注' ,dt Int32 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/tmp_ads_tr_order_info_local', '{replica}') PARTITION BY dt ORDER BY (tenant_id,dt) SETTINGS index_granularity = 8192; 2. -- 删除之前的本地表 分布式表 drop table tmp_ads_tr_order_info_local on cluster default_cluster; drop table tmp_ads_tr_order_info on cluster default_cluster; 3. -- 创建分布式表 -- 分布式表一般加_all, -- 第一个参数是集群名称 -- 第二个参数是数据库名称 -- 第三个参数是对应的本地表 -- 第四个参数是随机分布数据 -- Distributed引擎需要以下几个参数: -- default_cluster_1为查看ClickHouse服务cluster等环境参数信息中2查询到的cluster集群标识符。 -- default本地表所在的数据库名称。 -- test为本地表名称,该例中为2中创建的表名。 -- (可选的)分片键(sharding key) -- 该键与config.xml中配置的分片权重(weight)一同决定写入分布式表时的路由,即数据最终落到哪个物理表上。它可以是表中一列的原始数据(如site_id),也可以是函数调用的结果,如上面的SQL语句采用了随机值rand()。注意该键要尽量保证数据均匀分布,另外一个常用的操作是采用区分度较高的列的哈希值,如intHash64(user_id)。 CREATE TABLE IF NOT EXISTS default.tmp_ads_tr_order_info ON CLUSTER default_cluster AS default.tmp_ads_tr_order_info_local ENGINE = Distributed(default_cluster, default, tmp_ads_tr_order_info_local, rand()); 分布式表删除数据 本地表并指定集群名称 alter table tmp_ads_tr_order_info_local ON CLUSTER default_cluster delete where dt >= toYYYYMMDD(addDays(toDate('${entryDate}'), -30)) and dt< ${abortDateValue} 分布式表清空数据
TRUNCATE table tmp_ads_tr_order_info_local on cluster default_cluster ;
删除分布式表 drop table tmp_ads_tr_order_info_local on cluster default_cluster; drop table tmp_ads_tr_order_info on cluster default_cluster;