-- 查看特定表在各节点的 ZK path 状态 SELECT hostName() AS _host, table, zookeeper_path FROM clusterAllReplicas(oci_ck_cluster, system.replicas) WHERE `table` ='shortlink_request_log_local'
统计未同步的数据规模
为了确认存在多少差异数据(且只存在于特定单节点上),我们可以通过对比查询,将仅出现一次的 id 数量按节点进行分布统计。这里利用 GROUP BY ... HAVING count(*) = 1 找到未同步的孤儿数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
WITH raw_data AS ( SELECT hostName() AS _name, id FROM clusterAllReplicas(oci_ck_cluster, common_shared_db_ods.shortlink_request_log_local) ), unique_once AS ( SELECT id FROM raw_data GROUPBY id HAVINGcount(*) =1 ) SELECT _name, count(*) AS line_nums FROM raw_data WHERE id IN (SELECT id FROM unique_once) GROUPBY _name;
-- 1. 创建 node05 的临时表用于备份 CREATE TABLE IF NOTEXISTS common_shared_db_ods.shortlink_request_log_local_node05_tmp AS common_shared_db_ods.shortlink_request_log_local ENGINE = MergeTree();
-- 2. 仅抓取存在于 node05 上而其他节点没有的数据 WITH raw_data AS ( SELECT hostName() AS _name, id FROM clusterAllReplicas(oci_ck_cluster, common_shared_db_ods.shortlink_request_log_local) ), uniq_hosts AS ( SELECT id, groupUniqArray(_name) AS hosts FROM raw_data GROUPBY id HAVING length(hosts) =1AND hosts[1] ='ck-node-05.internal' ) INSERT INTO common_shared_db_ods.shortlink_request_log_local_node05_tmp SELECT*FROM common_shared_db_ods.shortlink_request_log_local WHERE id IN ( SELECT id FROM uniq_hosts );