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

news/2023/12/9 16:47:58

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

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

硬删除表数据

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

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

production-01 :) drop table test.myTable;DROP TABLE test.myTableQuery id: 5a1e5daa-567e-49fb-aa11-c08c31fcde40Ok.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 timestampQuery id: 26669a72-ba6f-4c99-860c-67f75272f3c20 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 timestampQuery id: 55afb63f-c4aa-46cb-b00b-c33bc7750c16Ok.0 rows in set. Elapsed: 0.045 sec. production-01 :) DROP TABLE test.myTable2 SYNC;DROP TABLE test.myTable2 SYNCQuery id: 645e3e7b-17ea-4857-a405-d789378bdb2cOk.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 timestampQuery id: 4dc22cdb-7e39-415c-8813-63a76c9ba3deOk.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_partsQuery 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.ppmy.cn/news/438548.html

相关文章

macappstore登不上去_Mac系统打不开appstore如何解决

appstore是应用商店,相信大家也都熟悉了,下载应用程序都可以在里面操作。好多小伙伴说在Mac系统打不开appstore应用商店,这样就没办法下载应用程序了,怎么办?出现这种问题的时候不要盲目的使劲去点,大家可以…

app store 打不开

主要是添加DNS可以改善这一情况 在 http://www.v2ex.com 里 最下方点击dns 可以找到最快的链接节点

“XXX.app 已损坏,打不开。您应该将它移到废纸篓”,Mac应用程序无法打开或文件损坏的处理方法(2)

1. 检查状态 在sip系统完整性关闭前,我们先检查是否启用了SIP系统完整性保护。打开终端输入以下命令【csrutil status】并回车: 你会看到以下信息中的一个,用来指示SIP状态。已关闭 disabled: System Integrity Protection status: disabl…

iphone文件app里无法连接服务器,苹果商店怎么打不开 无法连接到app store解决方法...

类型:ios办公学习大小:46.5M语言:中文 评分:10.0 标签: 立即下载 苹果商店是苹果商店下载app的唯一途径,由于服务器在国外,用户有时会碰到打不开的情况,今天很多小伙伴进入苹果商店显…

苹果app无法打开显示无法连接服务器,无法连接到app store是什么原因?苹果应用商店打不开的解决方法...

无法连接到app store是什么原因?苹果应用商店打不开的解决方法 使用iPhone的小伙伴一定都碰到过这种情况,有时候我们打开苹果应用商店,会提示“无法连接到app store”。这可让急于下载app的小伙伴着急了,难得要下载个东西,结果还不让下载了? 在这一点上,安卓用户就比iOS…

Mac下安装的软件打不开

问题:app已损坏,打不开。你应该将它移到废纸篓。 原因: 并非你安装的软件已损坏,而是Mac系统的安全设置问题,因为这些应用都是破解或者汉化的,那么解决方法就是临时改变Mac系统安全设置。 解决方法: 方案一…

Android没有报错,运行模拟器,提示停止运行,App根本打不开,下面是日志,烦请大佬们看看呐

2020-12-07 11:36:36.206 2122-2176/? D/WifiNative-HAL: Failing getSupportedFeatureset because HAL isn’t started 2020-12-07 11:36:36.206 2122-2140/? E/BatteryStatsService: no controller energy info supplied 2020-12-07 11:36:36.206 2122-2140/? E/BatterySt…

Android 微信小程序打不开app方案解决

之前一直困扰着app跳转小程序之后,小程序中无法唤起APP了,而且的响应信息也没有,终于结合多方案解决这个问题。 1,manifest中一定要这么写 2,WXEntryActivity必须要放指定路径,而且位于包名下,…

异常断电后,桌面软件打不开,一直转圈,com.intellij.ide.plugins.StartupAbortedException: Cannot start app

文章目录 问题:处理方式:1、重启大法,发现重启之后不管用2、点击所有桌面软件都是鼠标一直在转圈,无法打开程序。3、点击我的电脑解决分析:4、GoLAND、DataGrip无法正常打开软件,com.intellij.ide.plugins.…

mac电脑打不开应用程序的解决方法

mac电脑跟windows电脑一样,经常会出现打不开应用程序的情况,并且提示“因为它来自身份不明的开发者”,也不知道哪里出现问题?由于MAC系统与windows界面不一样,很多小编不懂怎么操作?为此,小编给…

macOS软件打不开的解决方法

升级到最新的macOS系统后,有一些破解软件可能会出现打不开的情况,并弹出如下几种提示: 1、“Sketch.app”已损坏,无法打开。 您应该推出磁盘映像。 2、打不开“Thunder”,因为它来自身份不明的开发者。 3、“EdrawMax.…

app已损坏,打不开。你应该将它移到废纸篓。

macOS Catalina 版本 10.15 MacBook Pro 安装 Microsoft Office for Mac 使用激活 Office 软件的时候出现「app已损坏,打不开。你应该将它移到废纸篓。」 使用如下方法解决: 系统偏好设置——安全性与隐私设置——允许从以下位置下载的App 选择——任何…

php使用use database 更改数据库后查询

如果您在 PHP 中想要更改当前连接的数据库,并在更改后查询数据,可以使用 mysqli_select_db() 函数来选择所需的数据库。 以下是一个示例: // 创建一个 mysqli 连接 $conn mysqli_connect("localhost", "username", &q…

pikache靶场通关——XSS漏洞

文章目录 前言环境第一关、反射型xss(get)Step.1、输入特殊字符测试Step.2、输入js语句Step.3、在URL中输入js语句 第二关、反射性xss(post)Step.1、输入获取cookie的js语句 第三关、存储型xssStep.1、输入获取cookie的js语句Step.2、查看页面源码Step.3、感受危害性 第四关、D…

华为鸿蒙系统手机便签数据怎么转移到苹果手机?

华为手机和苹果手机使用的并非同一操作系统,前者使用的是鸿蒙,后者采用的是iOS。不过,无论是华为鸿蒙系统手机还是iOS系统苹果手机,都可以安装便签,记录便签及待办事项等。那么华为鸿蒙系统手机便签数据怎么转移到苹果…

苹果的新手机都是5G,华为的新手机只有4G,大家怎么看待这个现象?

因为4GWiFi比5G更优秀。事实说明,5G存在诸多弊端,厕所覆盖不到,高铁用不了,农村难以覆盖,这样的5G也就只能作为城市中部分场景下的热点存在。 4G则已覆盖了城市的每个角落,农村地区也基本覆盖了4G&#xff…

华为与苹果区别在哪

今天有位在华为工作的孩子来家拜年,见到我家附近就是苹果;于是就问我,华为与苹果的区别在哪里?其实这话本来是不好回答的,因为企业文化和企业体制的不同而带来全方位的不同。再加上我实际并不了解这两家企业&#xff0…

华为mate50和苹果14区别 哪个好

mate50还是iPhone14的话,小编觉得,只谈性能,那么肯定是iPhone14更强了,现在iPhone 13的A15性能就比骁龙8处理器更出色,而iPhone14目前很有可能也是A15处理器。 华为mate50搭载的是骁龙8处理器,性能落后A15一…

从手机到平板,华为凭啥总能超越苹果?

​ 618期间电商平台激战,各大平台传来喜报,尤其是平板电脑销量增速惊人。 京东公布的华为在618期间的数据表明:6月1日-10日,笔记本电脑成交额同比增长60%,平板电脑成交额同比增长270%,路由器成交额同比增长…

用雪花 id 和 uuid 做 MySQL 主键,被领导怼了

在MySQL中设计表的时候,MySQL官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇…
最新文章