代码之家  ›  专栏  ›  技术社区  ›  Stepan Yakovenko

是否可以从clickhouse表中删除旧记录?

  •  2
  • Stepan Yakovenko  · 技术社区  · 6 年前

    据我所知,clickhouse只允许插入新数据。但有没有可能删除一段时间以前的块以避免硬盘溢出?

    3 回复  |  直到 6 年前
        1
  •  36
  •   simPod    3 年前

    利用突变改变数据

    请参阅“突变”功能上的文档 https://clickhouse.yandex/docs/en/query_language/alter/#mutations .
    该功能于2018年第3季度实施。

    删除数据

    ALTER TABLE <table> DELETE WHERE <filter expression>
    

    “脏”全部删除

    筛选表达式 . 如果您想通过变异删除所有数据,请指定总是正确的内容,例如:

    ALTER TABLE <table> DELETE WHERE 1=1
    

    更新数据

    UPDATE )类似的方式

    ALTER TABLE <table> UPDATE column1 = expr1 [, ...] WHERE <filter expression>
    

    注意它是异步的

    请注意,上面的所有命令都不会直接(同步)执行数据突变。相反,他们计划在后台独立执行(异步)的ClickHouse变异。这就是为什么 ALTER TABLE 更新 / DELETE . 你可以通过

    SELECT *
    FROM system.mutations
    WHERE is_done = 0
    

    在不使用突变的情况下改变数据

    TRUNCATE TABLE 语句,语法如下:

    TRUNCATE TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
    

    这将同步截断表。它将检查表大小,因此如果表大小超过,则不允许删除 max_table_size_to_drop

    https://clickhouse.tech/docs/en/sql-reference/statements/truncate/

        2
  •  3
  •   Wizhi    6 年前

        CREATE TABLE test.partitioned_by_month(d Date, x UInt8) ENGINE = MergeTree 
    
    PARTITION BY toYYYYMM(d) ORDER BY x;
    
        INSERT INTO test.partitioned_by_month VALUES ('2000-01-01', 1), ('2000-01-02', 2), ('2000-01-03', 3);
    
    INSERT INTO test.partitioned_by_month VALUES ('2000-02-03', 4), ('2000-02-03', 5);
    
    INSERT INTO test.partitioned_by_month VALUES ('2000-03-03', 4), ('2000-03-03', 5);
    
    SELECT * FROM test.partitioned_by_month;
    
    ---d------------|-------x-----
    
     2000-02-03 | 4 
    
     2000-02-03 | 5 
    
    
    ---d------------|-------x-----
    
     2000-03-03 | 4 
    
     2000-03-03 | 5 
    
    ---d------------|-------x-----
    
     2000-01-01 | 1 
    
     2000-01-02 | 2
    
     2000-01-03 | 3 
    
    ALTER TABLE test.partitioned_by_month DROP PARTITION 200001;
    
    select * from partitioned_by_month;
    
    
    ---d------------|-------x-----
    
     2000-03-03 | 4 
    
     2000-03-03 | 5 
    
    ---d------------|-------x-----
    
    
     2000-02-03 | 4 
    
     2000-02-03 | 5 
    
        3
  •  1
  •   Shishir Mudliyar    6 年前

    Clickhouse没有像Mysql数据库那样的更新/删除功能。但是我们仍然可以通过在分区中组织数据来进行删除,我不知道如何管理数据,所以我在这里举一个例子,比如在一个月的分区中存储数据。

    https://clickhouse.yandex/blog/en/how-to-update-data-in-clickhouse .