CREATE DATABASE flow_snmp ON CLUSTER clickhouse_remote_servers ENGINE = Ordinary;
创建数据库表
CREATE TABLE lxl_test_flow_snmp.rename_test ON CLUSTER clickhouse_remote_servers
(
`pipe_id` UUID,
`time` DateTime,
`in_flow` Float64,
`out_flow` Float64,
`in_bps` Float64,
`out_bps` Float64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/rename_test', '{replica}')
PARTITION BY toYYYYMM(time)
ORDER BY (pipe_id, time)
SETTINGS index_granularity = 8192
修改数据库表名
1
RENAME TABLE flow_snmp.flow_data_first_local TO flow_snmp.flow_data_first_local_v1 ON CLUSTER cluster_1shards_3replicas
添加字段
alter table slb_monitor.slb_monitor_data_local add column vm_id UUID
DML
删除分区数据
client.execute("ALTER TABLE flow_snmp.flow_data_second_local DROP PARTITION '202107'")
查询数据(防注入)
1 2 3 4 5 6 7 8 9 10 11
query_sql = "select time, all_conn, all_in_pkts, all_out_pkts, all_in_bytes, all_out_bytes from slb_monitor_data_all where vm_id = %(slb_vm_id)s and listen_id = %(listen_id)s order by time desc limit 1;" params = { 'slb_vm_id': slb_vm_id, 'listen_id': listen_id, } res = ck_client.execute(query_sql, params)
# in查询语法,假设查询列名为 column1 query ='SELECT * FROM your_table WHERE column1 IN (%(values)s)' params = {'values': ['value1', 'value2', 'value3']}
但是我们不能写个循环对每个分片进行修改,这样的方式显得蠢笨,ck提供了一个命令向集群中所有分片的本地表进行修改 ALTER TABLE flow_snmp.flow_data_first_local ON CLUSTER clickhouse_remote_servers UPDATE in_bps = 5555,out_bps = 2222 WHERE pipe_id = ‘4b9ed63c-ae84-11ec-87f3-1200cba86117’ and time > ‘2022-04-11 16:05:00’;
所幸目前线上库是1个分片三个复制,所以我不用加集群,直接对某个复制的本地表进行修改,改动就能成功的被同步到剩下的两个复制节点上,但问题没有完全解决 ALTER TABLE flow_snmp.flow_data_first_local UPDATE in_bps = 5555,out_bps = 2222 WHERE pipe_id = ‘4b9ed63c-ae84-11ec-87f3-1200cba86117’ and time > ‘2022-04-11 16:05:00’;
和修改数据情况类似,给出命令ALTER TABLE flow_snmp.flow_data_first_local ON CLUSTER clickhouse_remote_servers DELETE WHERE pipe_id = '4b9ed63c-ae84-11ec-87f3-1200cba86117' and time = '2022-04-11 16:00:00';