日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

09_ClickHouse,ReplacingMergeTree,案例,根据排序键去重,使用版本参数的去重(学习笔记)

發布時間:2024/9/27 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 09_ClickHouse,ReplacingMergeTree,案例,根据排序键去重,使用版本参数的去重(学习笔记) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

7.ReplacingMergeTree
7.1.ReplacingMergeTree
7.2.案例
7.2.1.示例1:根據排序鍵去重
7.2.2.示例2:使用版本參數的去重

7.ReplacingMergeTree

7.1.ReplacingMergeTree

  • 刪除具有相同排序鍵值的重復項。
  • 數據去重是在合并期間進行的。
  • 后臺的合并操作在未知的時間觸發,因此用戶無法對合并進行計劃。
  • 可使用OPTIMIZE語句運行計劃外的合并,但OPTIMIZE是一個很重的操作。
  • ReplacingMergeTree適合清除后臺的重復數據以節省空間。
  • 指定表引擎:
    ENGINE = ReplacingMergeTree([ver])
    參數:ver,版本列。版本列的類型為UInt*、Date或DateTime。可選參數。

    合并的時候,ReplacingTree從所有相同主鍵的行中選擇一行留下:如果ver未指定,選擇最后一條。如果指定了ver列,選擇ver值最大的版本。

    7.2.案例

    7.2.1.示例1:根據排序鍵去重

    建表:

    DROP TABLE replacingMergeTreeDemo; CREATE TABLE replacingMergeTreeDemo (UserID UInt32,CounterID UInt32,UserName String,EventDate Date ) ENGINE = ReplacingMergeTree() ORDER BY (UserID, CounterID) PRIMARY KEY (UserID);

    執行效果:

    xxxxx :) CREATE TABLE replacingMergeTreeDemo :-] ( :-] UserID UInt32, :-] CounterID UInt32, :-] UserName String, :-] EventDate Date :-] ) ENGINE = ReplacingMergeTree() :-] ORDER BY (UserID, CounterID) :-] PRIMARY KEY (UserID);CREATE TABLE replacingMergeTreeDemo (`UserID` UInt32,`CounterID` UInt32,`UserName` String,`EventDate` Date ) ENGINE = ReplacingMergeTree() PRIMARY KEY UserID ORDER BY (UserID, CounterID)Ok.0 rows in set. Elapsed: 0.055 sec. xxxxx :)

    2 插入數據
    分三批次插入數據,為了觀察效果,下面的三段腳本依次按順序分別執行,不要一起執行:
    批次1:

    insert into replacingMergeTreeDemo values(1,100,'xiaohe1','2020-04-21'); insert into replacingMergeTreeDemo values(2,100,'xiaohe2','2020-04-22'); insert into replacingMergeTreeDemo values(3,102,'xiaohe3','2020-04-23');

    插入后的效果為:

    xxxxx :) select * from replacingMergeTreeDemo;SELECT * FROM replacingMergeTreeDemo┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 3102 │ xiaohe3 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘ ┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 2100 │ xiaohe2 │ 2020-04-22 │ └────────┴───────────┴──────────┴────────────┘ ┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-04-21 │ └────────┴───────────┴──────────┴────────────┘3 rows in set. Elapsed: 0.009 sec. xxxxx :)

    批次2:

    insert into replacingMergeTreeDemo values(3,103,'xiaohe3','2020-04-23'); insert into replacingMergeTreeDemo values(2,101,'xiaohe2','2020-04-24'); insert into replacingMergeTreeDemo values(1,100,'xiaohe1','2020-04-20');

    插入后的效果為:

    xxxxx :) select * from replacingMergeTreeDemo;SELECT * FROM replacingMergeTreeDemo┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-04-20 │ └────────┴───────────┴──────────┴────────────┘ ┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-04-21 │ │ 2100 │ xiaohe2 │ 2020-04-22 │ │ 2101 │ xiaohe2 │ 2020-04-24 │ │ 3102 │ xiaohe3 │ 2020-04-23 │ │ 3103 │ xiaohe3 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘

    批次3:

    insert into replacingMergeTreeDemo values(2,100,'xiaohe2','2020-04-23');

    插入后的效果:

    xxxxx :) select * from replacingMergeTreeDemo; SELECT * FROM replacingMergeTreeDemo┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 2100 │ xiaohe2 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘ ┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-04-20 │ └────────┴───────────┴──────────┴────────────┘ ┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-04-21 │ │ 2100 │ xiaohe2 │ 2020-04-22 │ │ 2101 │ xiaohe2 │ 2020-04-24 │ │ 3102 │ xiaohe3 │ 2020-04-23 │ │ 3103 │ xiaohe3 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘7 rows in set. Elapsed: 0.007 sec. xxxxx :)

    如上所示,它并沒有合并數據,這時候需要手工執行計劃外合并。

    這時候就要手工執行計劃外合并:
    執行命令:optimize table replacingMergeTreeDemo

    xxxxx :) optimize table replacingMergeTreeDemo;OPTIMIZE TABLE replacingMergeTreeDemoOk.0 rows in set. Elapsed: 0.003 sec. xxxxx :) select * from replacingMergeTreeDemo;SELECT * FROM replacingMergeTreeDemo┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-04-20 │ │ 2100 │ xiaohe2 │ 2020-04-23 │ │ 2101 │ xiaohe2 │ 2020-04-24 │ │ 3102 │ xiaohe3 │ 2020-04-23 │ │ 3103 │ xiaohe3 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘5 rows in set. Elapsed: 0.006 sec. xxxxx :)

    從這個示例可以發現,ReplacingMergeTree是根據排序項對數據去重的,而不是根據主鍵。

    7.2.2.示例2:使用版本參數的去重

    在示例1中, 我們簡單觀察可以發現, 去重后,保留的記錄是最后一條記錄。
    如果指定了版本,則保留版本列的值最大的記錄。
    1.建表
    使用EventDate列作為版本字段。

    DROP TABLE replacingMergeTreeDemo; CREATE TABLE replacingMergeTreeDemo (UserID UInt32,CounterID UInt32,UserName String,EventDate Date ) ENGINE = ReplacingMergeTree(EventDate) ORDER BY (UserID, CounterID) PRIMARY KEY (UserID);

    2.插入數據
    批次1:

    insert into replacingMergeTreeDemo values(1,100,'xiaohe1','2020-06-21'); insert into replacingMergeTreeDemo values(2,100,'xiaohe2','2020-11-27'); insert into replacingMergeTreeDemo values(3,102,'xiaohe3','2020-04-23');

    批次2:

    insert into replacingMergeTreeDemo values(3,103,'xiaohe3','2020-04-23'); insert into replacingMergeTreeDemo values(2,101,'xiaohe2','2020-04-24'); insert into replacingMergeTreeDemo values(1,100,'xiaohe1','2020-04-20');

    批次3:

    insert into replacingMergeTreeDemo values(2,100,'xiaohe2','2020-04-23');

    查看數據:

    xxxxx :) select * from replacingMergeTreeDemo;SELECT * FROM replacingMergeTreeDemo┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 2100 │ xiaohe2 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘ ┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-04-20 │ └────────┴───────────┴──────────┴────────────┘ ┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-06-21 │ │ 2100 │ xiaohe2 │ 2020-11-27 │ │ 2101 │ xiaohe2 │ 2020-04-24 │ │ 3102 │ xiaohe3 │ 2020-04-23 │ │ 3103 │ xiaohe3 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘7 rows in set. Elapsed: 0.009 sec. xxxxx :) optimize table replacingMergeTreeDemo;OPTIMIZE TABLE replacingMergeTreeDemoOk.0 rows in set. Elapsed: 0.002 sec. xxxxx :) select * from replacingMergeTreeDemo;SELECT * FROM replacingMergeTreeDemo┌─UserID─┬─CounterID─┬─UserName─┬──EventDate─┐ │ 1100 │ xiaohe1 │ 2020-06-21 │ │ 2100 │ xiaohe2 │ 2020-11-27 │ │ 2101 │ xiaohe2 │ 2020-04-24 │ │ 3102 │ xiaohe3 │ 2020-04-23 │ │ 3103 │ xiaohe3 │ 2020-04-23 │ └────────┴───────────┴──────────┴────────────┘5 rows in set. Elapsed: 0.005 sec. xxxxx :)

    經過上面案例,可以看出,最終保留了如下數據:

    2100 │ xiaohe2 │ 2020-11-27

    從這個示例可以發現, ReplacingMergeTree根據排序項對數據去重的, 保留版本字段列對應的最大值的記錄。

    總結

    以上是生活随笔為你收集整理的09_ClickHouse,ReplacingMergeTree,案例,根据排序键去重,使用版本参数的去重(学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。