我有一个特殊的场景,我需要每 30 分钟左右截断并批量插入 ClickHouse DBMS 中的表。我在 ClickHouse 中找不到截断选项的参考。
但是,我可以找到建议,我们可以通过删除旧表、创建一个具有相同名称的新表并将数据插入其中来间接实现这一点。
对此,我有几个问题。
- 这是如何实现的?这个过程中的步骤顺序是什么?
- 在删除和重新创建表期间,其他查询(例如Select )会发生什么情况?
- 在 ClickHouse 中删除和重新创建表通常需要多长时间?
- 有没有更好更干净的方法可以实现?
我有一个特殊的场景,我需要每 30 分钟左右截断并批量插入 ClickHouse DBMS 中的表。我在 ClickHouse 中找不到截断选项的参考。
但是,我可以找到建议,我们可以通过删除旧表、创建一个具有相同名称的新表并将数据插入其中来间接实现这一点。
对此,我有几个问题。
这是如何实现的?这个过程中的步骤顺序是什么?
TRUNCATE支持。现在无需删除并重新创建表。
在删除和重新创建表期间,其他查询(例如 Select)会发生什么情况?
这取决于您使用的表引擎。对于合并树族,您将获得类似快照的行为SELECT。
在 ClickHouse 中删除和重新创建表通常需要多长时间?
我认为这取决于底层文件系统处理文件删除的速度。对于大型表,它可能包含数百万个数据部分文件,这会导致截断速度慢。但是,在您的情况下,我不会担心太多。
有没有更好更干净的方法可以实现?
我建议使用带有 (DateTime / 60) 列(每分钟)的分区以及不断为过时分区进行分区收集的用户脚本。