Go 大数据生态开源项目 CDS 中 ClickHouse 使用的建表方案

实时表

从中可以看出两点:

  • 也就是说数据导入后不考虑变更,而且想要直接分析源数据。

因为上面提到的需求,更新这个功能在随后还是以 mutation 的形式加入了。这种 mutation 形式在官网中:

“Data deduplication occurs only during a merge. Merging occurs in the background at an unknown time, so you can't plan for it. Some of the data may remain unprocessed. Although you can run an unscheduled merge using the OPTIMIZE query, don't count on using it, because the OPTIMIZE query will read and write a large amount of data. Thus, ReplacingMergeTree is suitable for clearing out duplicate data in the background in order to save space, but it doesn't guarantee the absence of duplicates.”

final 关键字就可以得到最终数据,而不用动用 final 也有缺点,就是会导致 MaterializeMySQL也使用了同样的方法 https://github.com/ClickHouse/ClickHouse/issues/4006 。加上如何合理使用 利用 ClickHouse ,数据就可以被自动合并了。

ReplacingMergeTree 合并后会变成这一列,查询时在 where 中添加过滤条件就好了。

)

中的rtu变更insert` 的操作。

ReplacingMergeTree 具体建表方式如下:

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, ...]
  • 你需要指定一个版本列用于数据合并时确定最新数据,一般指定成 ClickHouse 推荐数据直接插入 clickhosue 集群节点的本地存储表中,而不是通过分布式表插入。这意味着你需要将数据按主键自行散列好后插入对应集群节点的本地存储表。

  • 这种表引擎对 MergeTree 表中。

  • 这种表引擎给 历史版本与还原

    如果只保存增量和变更数据将会节省很多空间,问题是如何从一堆增量和变更数据中还原每一天的数据?

    ReplacingMergeTree

     表引擎,在上面提到的第 4 点在 clickhouse 中使用普通 argMax和 合理的分区 方案可以实现版本还原。如:

    -- 查询某一日全部用户中编辑角色的数量SELECT date     , uniq(user_id)FROM (         SELECT date              , id                                    user_id              , argMax(users.role, users.update_time) role_         FROM (                  SELECT id                       , update_time                       , role                       , toDate('2020-11-11') date                  FROM default.user                  WHERE                     create_time < toDateTime(date + INTERVAL 1 DAY)                    AND update_time < toDateTime(date + INTERVAL 1 DAY)                  ) users         GROUP BY date, id         ) day_snap_shot -- 生成当日快照WHERE role_ = 'editor' GROUP BY date;

    上面介绍了两种建表方案,一种实时的,一种带有所有版本变更的。两种方案各有优劣,根据使用场景选择。这两种方案都不完美。

项目地址

go-zero 项目地址:https://github.com/tal-tech/go-zero

<p style="box-sizing: border-box;outline-style: none;margin-bottom: 20px;font-size: 15px;line-height: 26px;color: rgb(64, 64, 64);font-family: Helvetica, Arial, " pingfang="" sc",="" "noto="" sans",="" roboto,="" "microsoft="" yahei",="" sans-serif;letter-spacing:="" 0.45px;text-align:="" left;white-space:="" normal;background-color:="" rgb(255,="" 255,="" 255);

(0)

相关推荐

  • 致ClickHouse用户的一封信

    亲爱的ClickHouse用户: 您好! 感谢您在百忙之中抽出时间来阅读此信.虽然未曾谋面,但我们关注您已经有很长一段时间了. 您的企业非常重视数据分析工作,想通过数据分析来提升运营效率,发现生产经营 ...

  • 交互式分析领域,为何 ClickHouse 能够杀出重围?

    一.交互式分析之 ClickHouse 1. 交互式分析简介 交互式分析,也称 OLAP(Online Analytical Processing),它赋予用户对海量数据进行多维度.交互式的统计分析能 ...

  • ClickHouse常用命令,基本数据类型

    一.建库建表基本命令 二.基本数据类型 整型 浮点型 布尔型 字符串 枚举类型 数据组 元组 日期 时间戳 三.表引擎 一.建库建表基本命令 查看库 show databases; 使用库 use d ...

  • Oracle merge into的优势

    简介 Oracle merge into命令,顾名思义就是"有则更新,无则插入",这个也是merge into 命令的核心思想,在实际开发过程中,我们会经常遇到这种通过两表互相关联 ...

  • 数仓引入ClickHouse之后,性能提升了400%!

    作者介绍 小琴,携程高级数据经理,负责酒店BI.数仓工作,专注于大数据应用领域多年. 一.背景 随着时间推移和业务的快速发展,携程酒店数据累积越来越多.目前流量日数据在3T左右,再加上各种订单.价.量 ...

  • Clickhouse高可用配置总结

    Clickhouse高可用配置总结

  • 基于Flink构建实时数仓实践

    导读 随着公司用户增长业务快速发展,陆续孵化出 部落.同镇.C 端会员.游戏等非常多的业务板块.与此同时产品及运营对实时数据需求逐渐增多,帮助他们更快的做出决策,更好的进行产品迭代,实时数仓的建设变得 ...

  • 基于 Flink ClickHouse 打造轻量级点击流实时数仓

    Flink 和 ClickHouse 分别是实时计算和(近实时)OLAP 领域的翘楚,也是近些年非常火爆的开源框架,很多大厂都在将两者结合使用来构建各种用途的实时平台,效果很好.关于两者的优点就不再赘 ...

  • 阿里云ClickHouse海量数据分析分享

    数牛会即数据从业者社群,链接牛人,赋能他人.特设数字企业家群(限营收千万创始人).首席数据官(CEO/CDO/CIO).数据科学技术群.数据中台与数据治理(DW).BI数据分析群(PM).品牌营销群( ...

  • 京东OLAP实践之路

    分享嘉宾:李阳 京东 资深研发工程师 编辑整理:连志鹏 出品社区:DataFunTalk 导读:本文主要介绍京东在构建OLAP从无到有各环节考虑的重点,由需求场景出发,剖析当前存在的问题,并提供解决方 ...