美文网首页
clickhouse 更新

clickhouse 更新

作者: 无我_a50f | 来源:发表于2020-09-22 15:43 被阅读0次

    简介

    ALTER 语法更新异步,性能等问题导致clickhouse 不适合做频繁的更新,可以使用 replaceMergeTree代替。
    该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。

    在数据合并的时候会对主键进行去重,合并会在后台执行,执行时间未知,因此你无法预先做出计划,当然你也可以调用OPTIMIZE语句来发起合并计划,但是这种方式是不推荐的,因为OPTIMIZE语句会引发大量的读写请求。

    建表语句

    CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
    (
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
    ) ENGINE = ReplacingMergeTree([ver])
    [PARTITION BY expr]
    [ORDER BY expr]
    [SAMPLE BY expr]
    [SETTINGS name=value, ...]
    
    • ENGINE:引擎名和参数。
    • ver:版本列,类型可以是UInt*,Date,或者DateTime,可选择的参数。 合并的时候ReplacingMergeTree从相同的主键中选择一行保留,如果ver列未指定,则选择最后一条,如果ver列已指定,则选择ver值最大的版本。
    • PARTITION BY:分区键。要按月分区,可以使用表达式 toYYYYMM(date_column) ,这里的 date_column 是一个 Date 类型的列。这里该分区名格式会是 "YYYYMM" 这样。
    • ORDER BY: 表的排序键。可以是一组列或任意的表达式。 例如: ORDER BY (CounterID, EventDate) 。
    • SAMPLE BY : 抽样的表达式。如果要用抽样表达式,主键中必须包含这个表达式。例如: SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID)) 。
    • SETTINGS : 影响 MergeTree 性能的额外参数:
    1. index_granularity 索引粒度。即索引中相邻『标记』间的数据行数。默认值,8192 。该列表中所有可用的参数可以从这里查看 MergeTreeSettings.h 。
    2. use_minimalistic_part_header_in_zookeeper — 数据片段头在 ZooKeeper 中的存储方式。如果设置了 use_minimalistic_part_header_in_zookeeper=1,ZooKeeper 会存储更少的数据。
    3. min_merge_bytes_to_use_direct_io 使用直接 I/O 来操作磁盘的合并操作时要求的最小数据量。合并数据片段时,ClickHouse 会计算要被合并的所有数据的总存储空间。如果大小超过了 min_merge_bytes_to_use_direct_io 设置的字节数,则 ClickHouse 将使用直接 I/O 接口(O_DIRECT 选项)对磁盘读写。如果设置 min_merge_bytes_to_use_direct_io = 0 ,则会禁用直接 I/O。默认值:10 * 1024 * 1024 * 1024 字节。

    以上为建表参数描述,和MergeTree 相同,ver参数是本章重点。

    示例

    测试建表语句

    CREATE TABLE default.ReplacingMergeTreeTest2 
    (
     id UInt8,
     version UInt8,
     name String
    ) ENGINE = ReplacingMergeTree(version)
    PARTITION BY id
    ORDER BY id
    

    插入数据

    insert into default.ReplacingMergeTreeTest2(id,version,name) values(1,25,'张三');
    insert into default.ReplacingMergeTreeTest2(id,version,name) values(1,22,'李四');
    insert into default.ReplacingMergeTreeTest2(id,version,name) values(2,28,'nn');
    

    合并数据

    OPTIMIZE TABLE default.ReplacingMergeTreeTest2;
    

    相关文章

      网友评论

          本文标题:clickhouse 更新

          本文链接:https://www.haomeiwen.com/subject/romwyktx.html