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

news2024/12/23 15:50:03

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 │
    └──────────┴────────────────────────────────────┴──────────────┴───────────────────────────────────┴─────────┴─────────┴──────────────────┴──────────────────┴───────┘

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务SpringCloudday1 认识微服务与服务注册(Eureka与nacos)

SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

arduino w801 流水灯

先复制个图过来 来源 https://www.cnblogs.com/milton/p/15621540.html 前两天老外跟联盛德网站回复我arduino库有完善的了 GitHub - board707/w80x_arduino: w806 for arduino ide package arduino 添加库地址 https://raw.githubusercontent.com/board707/w80x_arduino/ha…

【genius_platform软件平台开发】第九十八讲:嵌入式网络接口(MAC、PHY)

1. 嵌入式网络简介 1.1 嵌入式下的网络硬件接口 提起网络,我们一般想到的硬件就是“网卡”,现在网卡已经是通过一个芯片来完成了,嵌入式网络硬件分为两部分:MAC和PHY,大家都是通过看数据手册来判断一款SOC是否支持网络…

Linux tar.xz 格式的文件正确的解压命令

Linux tar.xz 最近下载 Linux kernel,好像最近流行 tar.xz 格式的后缀 对于 xz 后缀的压缩文件,我之前的解压方式是分为两步: xz -d xxx.tar.xz 解压成 xxx.tar 格式文件,然后再 tar xf xxx.tar 解压文件。 这样的操作不仅比较的…

【Java基础学习打卡11】Path环境变量的配置

目录 前言一、为什么配置环境变量二、如何配置环境变量三、JDK11的环境变量配置总结 前言 本文我们要知道为什么配置环境变量,自己思考不配置环境变量可以吗?JDK 11 如何配置环境变量。 一、为什么配置环境变量 原因很简单,就是方便命令的查…

痛点-调研-明确需求-实现-测试-发布 不需要手一步到位使用AGI生成去广告脚本,复制粘贴发布到Greasy Fork

总算又想起密码了, 自从用了语雀后, 其他平台基本都不再使用了 csdn 真的**, c h a t g p t 是禁词(已经改为了AGI, 通用型人工智能), 你倒是说清楚啊,直接来一句违反社区规定, 莫名其妙, 得靠猜…服了 今天来补上一篇利用AGI生成的js去广告脚本 前置知识(不看也问题不大) …

MyBatis junit 日志框架logback

JUnit是专门做单元测试的组件 <!-- junit依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>…

牛客网最全的 Java 面试八股文大合集汇总

就目前大环境来看&#xff0c;跳槽成功的难度比往年高很多。一个明显的感受&#xff1a;今年的面试&#xff0c;无论一面还是二面&#xff0c;都很考验 Java 程序员的技术功底。这不马上又到了面试跳槽的黄金段&#xff0c;成功升职加薪&#xff0c;不成功饱受打击。当然也要注…

关于laravel使用Elastic Search的一些记录

文章目录 1. 准备工作2. 本地安装elastic search3. laravel安装es依赖4. laravel中使用es参考链接 1. 准备工作 因为我本地php版本是7.3.4&#xff0c;不支持太高的es。 所以使用如下环境: laravel6 php7.3.4 elastic search 7.17.2 2. 本地安装elastic search 1. 下载安装包…

备战金九银十,两份 JAVA 面试题 2023 最新整合版,祝你脱颖而出

前言 马上又准备到了一年一度的金九银十环节&#xff0c;作为一年中的跳槽求职高峰期&#xff0c;相信有很多朋友都已经开始着手准备面试了&#xff0c;但是网上的面试题杂七杂八的&#xff0c;所以今天分享 2 份整合好的合集版&#xff0c;从基础到深入比较全面。即适合初入社…

windows10系统-14-Hexo博客框架和DevSidecar加速访问GitHub

HexoGitee零代码基础从0到1部署博客全流程&#xff08;一&#xff09; HexoGithub博客搭建教程 亲测解决npm ERR! Unexpected end of JSON input while parsing near…的方法 Hexo-修改Hexo主题 hexo免费主题 现在市面上的博客很多&#xff0c;如CSDN&#xff0c;博客园&#x…

【干货】Android系统定制基础篇:第二部分

1、Android Launcher3支持键盘切换焦点 Android Launcher3 默认并不支持键盘操作&#xff0c;无法切换焦点&#xff0c;在一些需要支持键盘或遥控操作的设备中无法使用&#xff0c;因些对 Launcher3 做简单修改&#xff0c;使其支持键盘切换焦点。 diff --git a/packages/app…

C语言学习笔记:指针

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录 简介 …

Redis客户端 - SpringDataRedis

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis客户端 - SpringDataRedis | CoderMast编程桅杆https://www.codermast.com/database/redis/spring-data-redis.html 介绍 SpringData 是 Spring 中操作数据的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中…

2023 年最新阿里巴巴 Java 面试权威指南(泰山版)

不知道现在同学们有没有想法备战金九银十&#xff0c;好多未雨绸缪的同学已经开始整理学习资源了&#xff0c;有些同学想冲击一下大厂&#xff0c;有些同学希望自己能够涨薪&#xff01;不管是出于哪种想法&#xff0c;看一下现在的时间&#xff0c;也确实该准备了&#xff0c;…

English Learning - L3 作业打卡 Lesson6 Day41 2023.6.14 周三

English Learning - L3 作业打卡 Lesson6 Day41 2023.6.14 周三 引言&#x1f349;句1: In the early morning, the food that had been laid out for the dead is thrown into a river or into the sea as it is considered unlucky for anyone living to eat it.成分划分弱读…

C语言学习笔记:数组

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录​​​​…

基于javaweb jsp+SSM 酒店客房管理系统的设计与实现

一.项目介绍 本系统需要进行登录&#xff0c;点击登录即可跳转到登陆页面&#xff0c; 管理员密码是在数据库中设置好的可以直接登录&#xff0c; 其它用户需要管理员登录以后注册用户才可以根据账号密码登录。 当登录进入到系统当中时 可以对客房&#xff0c;商品&#xff…

使用python制作一个批量查询搜索排名的SEO免费工具

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 搭建背景 最近工作中需要用…

《人月神话》译文修订明细(10)-读者可以对照修改

《人月神话》译文修订明细&#xff08;1&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;2&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;3&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;4&#xff09;-读…