# 正确删除并理解ClickHouse表和分区

ClickHouse表有一组数据块组成,称为分区和部分,分区是逻辑概念,对应磁盘上的目录,部分对应磁盘上的实际文件。

我们可以从表中分离(detach) 分区(partition)或部分(parts),并没有实际删除数据,意味着数据从表中删除,并没有从磁盘上删除,我们可以在未来某个时刻重新附着分区或部分。

硬删除表数据

当删除原子数据库引擎表时,数据和表本身没有立刻从磁盘删除。只有当表不再被并发查询使用并且从收到查询已过去8分钟(old_parts_lifetime参数设置)时才会被真正删除。

例如,在某些情况下在删除并重新创建表时,可能会导致Zookeeper出现问题。因为表元数据仍然存在,等待异步删除,但此时试图再次创建它。例如:删除已复制的表并立即重新创建它将导致Zookeeper错误。

production-01 :) drop table test.myTable;

DROP TABLE test.myTable

Query id: 5a1e5daa-567e-49fb-aa11-c08c31fcde40

Ok.

0 rows in set. Elapsed: 0.005 sec. 

production-01 :) CREATE TABLE test.myTable
                 (
                     `timestamp` DateTime,
                     `event_type` String
                 )
                 ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/test.myTable', '{replica}')
                 PARTITION BY toYear(timestamp)
                 ORDER BY (timestamp)

CREATE TABLE test.myTable
(
    `timestamp` DateTime,
    `event_type` String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/test.myTable', '{replica}')
PARTITION BY toYear(timestamp)
ORDER BY timestamp

Query id: 26669a72-ba6f-4c99-860c-67f75272f3c2


0 rows in set. Elapsed: 0.030 sec. 

Received exception from server (version 22.10.1):
Code: 253. DB::Exception: Received from clickhouse-01:49000. DB::Exception: Replica /clickhouse/tables/01-01/test.myTable/replicas/clickhouse-01 already exists. (REPLICA_IS_ALREADY_EXIST)

为了避免这种错误,可以增加sync修饰符,它会同步删除数据和表元数据,直到所有数据都被清除后才返回。这时重新创建表不会产生错误:

production-01 :) CREATE TABLE test.myTable2
                 (
                     `timestamp` DateTime,
                     `event_type` String
                 )
                 ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/test.myTable2', '{replica}')
                 PARTITION BY toYear(timestamp)
                 ORDER BY (timestamp)

CREATE TABLE test.myTable2
(
    `timestamp` DateTime,
    `event_type` String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/test.myTable2', '{replica}')
PARTITION BY toYear(timestamp)
ORDER BY timestamp

Query id: 55afb63f-c4aa-46cb-b00b-c33bc7750c16

Ok.

0 rows in set. Elapsed: 0.045 sec. 

production-01 :) DROP TABLE test.myTable2 SYNC;

DROP TABLE test.myTable2 SYNC

Query id: 645e3e7b-17ea-4857-a405-d789378bdb2c

Ok.

0 rows in set. Elapsed: 0.046 sec. 

production-01 :) CREATE TABLE test.myTable2
                 (
                     `timestamp` DateTime,
                     `event_type` String
                 )
                 ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/test.myTable2', '{replica}')
                 PARTITION BY toYear(timestamp)
                 ORDER BY (timestamp)

CREATE TABLE test.myTable2
(
    `timestamp` DateTime,
    `event_type` String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/test.myTable2', '{replica}')
PARTITION BY toYear(timestamp)
ORDER BY timestamp

Query id: 4dc22cdb-7e39-415c-8813-63a76c9ba3de

Ok.

0 rows in set. Elapsed: 0.039 sec.

注意,SYNC也在删除数据库时也可使用:

DROP DATABASE test SYNC;

实际应用中会遇到一些表的分区或部分数据不能正确加载,通过查看系统表可以看到这些分区或部分的状态,下面一节我们分析造成这些状态的原因,以及如何查询定位,方便后续手动修复。

分离分区或部分的原因

有以下几种原因导致有分离状态的分区或部分:

  • 执行手动命令产生的分离状态分区或部分:[ALTER TABLE DETACH PART|PARTITION](https://clickhouse.com/docs/en/sql-reference/statements/alter/partition/#detach-partitionpart)

  • 在本地存在的part,在Zookeeper元数据中却没有,其状态会被设置未:“unexpected” 或 “ignored”

  • 在本地和Zookeeper元数据中都存在的part,但状态不匹配。part将被设置未 “broken” ,并从另外服务器从新下载

  • 法定数量未达到的part。将设置为 “noquorum”

还有其他原因,但上述几个是最常见的。大多数情况下是由于不正当关闭ClickHouse造成的。当ClickHouse服务启动时开始执行正常检查,通过分离受影响的部分,ClickHouse可以继续启动(而不是崩溃),并允许您修复问题。

查询分离的表分区和部分

通过查询system.detached_parts表,你能发现ClickHouse服务器所有已分离的部分。

    SELECT *
    FROM system.detached_parts

    Query id: fbc3d2b7-94c1-4ba4-8197-d3781efea792

    ┌─database─┬─table──────────────────────────────┬─partition_id─┬─name──────────────────────────────┬─disk────┬─reason──┬─min_block_number─┬─max_block_number─┬─level─┐
    │ database │ t_957657bace18444a80fc9b465269e132 │ 202203       │ broken_202203_4554988_4554988_0   │ default │ broken  │          455498845549880 │
    │ database │ t_957657bace18444a80fc9b465269e132 │ 202201       │ ignored_202201_6774780_6774868_20 │ default │ ignored │          6774780677486820 │
    │ database │ t_7777dbf2efff4253b7d0802112ae4061 │ 202103202103_764230_1414635_14_984413   │ default │         │           764230141463514 │
    │ database │ t_7777dbf2efff4253b7d0802112ae4061 │ 202103202103_1414636_1448800_9          │ default │         │          141463614488009 │
    │ database │ t_7777dbf2efff4253b7d0802112ae4061 │ 202103202103_730438_764229_9            │ default │         │           7304387642299 │
    │ database │ t_7777dbf2efff4253b7d0802112ae4061 │ 202103202103_0_730437_45                │ default │         │                073043745 │
    │ database │ t_ab2e566af7e74637977f07ba42339f1e │ 202103202103_192019_400537_14_717974    │ default │         │           19201940053714 │
    │ database │ t_ab2e566af7e74637977f07ba42339f1e │ 202103202103_95413_192018_13_717974     │ default │         │            9541319201813 │
    └──────────┴────────────────────────────────────┴──────────────┴───────────────────────────────────┴─────────┴─────────┴──────────────────┴──────────────────┴───────┘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31775.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JS 介绍 Babel 的使用及 presets plugins 的概念

一、Babel 是什么 Bebal 可以帮助我们将新 JS 语法编译为可执行且兼容旧浏览器版本的一款编译工具。 举个例子,ES6(编译前): const fn () > {};ES5(编译后): var fn function() {}二、B…

设计模式-抽象工厂模式

抽象工厂模式 1、抽象工厂模式简介2、具体实现 1、抽象工厂模式简介 抽象工厂模式(Abstract Factory Pattern)在工厂模式尚添加了一个创建不同工厂的抽象接口(抽象类或接口实现),该接口可叫做超级工厂。在使用过程中,我们首先通过抽象接口创建不同的工厂…

【HTML界面设计(二)】说说模块、登录界面

记录很早之前写的前端界面(具体时间有点久远) 一、说说模板 采用 适配器(Adapter)原理 来设计这款说说模板,首先看一下完整效果 这是demo样图,需要通过业务需求进行修改的部分 这一部分,就是dem…

Redis系列--布隆过滤器(Bloom Filter)

一、前言 在实际开发中,会遇到很多要判断一个元素是否在某个集合中的业务场景,类似于垃圾邮件的识别,恶意ip地址的访问,缓存穿透等情况。类似于缓存穿透这种情况,有许多的解决方法,如:redis存储…

宏景eHR SQL注入漏洞复现(CNVD-2023-08743)

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR 存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃取数…

如何在大规模服务中迁移缓存

当您启动初始服务时,通常会过度设计以考虑大量流量。但是,当您的服务达到爆炸式增长阶段,或者如果您的服务请求和处理大量流量时,您将需要重新考虑您的架构以适应它。糟糕的系统设计导致难以扩展或无法满足处理大量流量的需求&…

docker基础

文章目录 通过Vagrant安装虚拟机修改虚拟机网络配置 docker CE安装(在linux上)docker desktop安装(在MacOS上)Docker架构关于-阿里云镜像加速服务配置centos卸载docker 官网: http://www.docker.com 仓库: https://hub.docker.com Docker安装在虚拟机上,可以通过V…

Go语言的TCP和HTTP网络服务基础

目录 【TCP Socket 编程模型】 Socket读操作 【HTTP网络服务】 HTTP客户端 HTTP服务端 TCP/IP 网络模型实现了两种传输层协议:TCP 和 UDP,其中TCP 是面向连接的流协议,为通信的两端提供稳定可靠的数据传输服务;UDP 提供了一种…

[MySQL]不就是SQL语句

前言 本期主要的学习目标是SQl语句中的DDL和DML实现对数据库的操作和增删改功能,学习完本章节之后需要对SQL语句手到擒来。 1.SQL语句基本介绍 SQL(Structured Query Language)是一种用于管理关系型数据库的编程语言。它允许用户在数据库中存…

双因素身份验证在远程访问中的重要性

在快速发展的数字环境中,远程访问计算机和其他设备已成为企业运营的必要条件。无论是在家庭办公室运营的小型初创公司,还是团队分散在全球各地的跨国公司,远程访问解决方案都能保证工作效率和连接性,能够跨越距离和时间的阻碍。 …

7Z045 引脚功能详解

本文针对7Z045芯片,详细讲解硬件设计需要注意的技术点,可以作为设计和检查时候的参考文件。问了方便实用,按照Bank顺序排列,包含配置Bank、HR Bank、HP Bank、GTX Bank、供电引脚等。 参考文档包括: ds191-XC7Z030-X…

怎么计算 flex-shrink 的缩放尺寸

计算公式: 子元素的宽度 - (子元素的宽度的总和 - 父盒子的宽度) * (某个元素的flex-shrink / flex-shrink总和) 面试问题是这样的下面 left 和 right 的宽度分别是多少 * {padding: 0;margin: 0;}.container {width: 500px;height: 300px;display: flex;}.left {width: 500px…

红日靶场(一)外网到内网速通

红日靶场(一) 下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ win7:双网卡机器 win2003:域内机器 win2008域控 web阶段 访问目标机器 先进行一波信息收集,扫一下端口和目录 扫到phpmyadmin,还有一堆…

【资料分享】Xilinx Zynq-7010/7020工业核心板规格书(双核ARM Cortex-A9 + FPGA,主频766MHz)

1 核心板简介 创龙科技SOM-TLZ7x是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业核心板,处理器集成PS端双核ARM Cortex-A9 PL端Artix-7架构28nm可编程逻辑资源,通过工业级B2B连接器引出千兆网口、USB、CAN、UA…

Triton教程 --- 动态批处理

Triton教程 — 动态批处理 Triton系列教程: 快速开始利用Triton部署你自己的模型Triton架构模型仓库存储代理模型设置优化动态批处理 Triton 提供了动态批处理功能,将多个请求组合在一起执行同一模型以提供更大的吞吐量。 默认情况下,只有当每个输入在…

【开源与项目实战:开源实战】81 | 开源实战三(上):借Google Guava学习发现和开发通用功能模块

上几节课,我们拿 Unix 这个超级大型开源软件的开发作为引子,从代码设计编写和研发管理两个角度,讲了如何应对大型复杂项目的开发。接下来,我们再讲一下 Google 开源的 Java 开发库 Google Guava。 Google Guava 是一个非常成功、…

io.netty学习(十一)Reactor 模型

目录 前言 传统服务的设计模型 NIO 分发模型 Reactor 模型 1、Reactor 处理请求的流程 2、Reactor 三种角色 单Reactor 单线程模型 1、消息处理流程 2、缺点 单Reactor 多线程模型 1、消息处理流程 2、缺点 主从Reactor 多线程模型 主从Reactor 多线程模型示例 1…

CTF-Show密码学:ZIP文件密码破解【暴力破解】

萌新 隐写23 题目内容: 文件的主人喜欢用生日做密码,而且还是个90后。 一、已知条件 在这个题目中,我们有以下已知条件: 文件的主人喜欢用生日做密码 - 这个条件告诉我们,密码可能是一个八位的纯数字密码&#xff0c…

云原生之深入解析如何正确计算Kubernetes容器CPU使用率

一、简介说明 使用 Prometheus 配置 kubernetes 环境中 Container 的 CPU 使用率时,会经常遇到 CPU 使用超出 100%,现在来分析一下: container_spec_cpu_period:当对容器进行 CPU 限制时,CFS 调度的时间窗口&#xff…

[架构之路-214]- UML-类图图解、详解、结构化、本质化讲解

目录 一、什么是类 1.1 概述 1.2 UML中类的表示 1.3 接口 1.4 抽象类 1.5 模板类 二、什么类图 2.1 概述 2.2 类关系 三、UML类图 3.1 结构关系 3.1.1 完全一体:继承关系 (类与类耦合度最高,类与类之间最强的关系) …