什么是TTL?
  TTL的意思是Time To Live表示数据的存活时间。由于数据的价值会根据保存的时间成反比,出于存储成本的考虑通常只会保留近一年的数据。而在MergeTree (合并树)引擎中,可以通过设置TTL来轻松管理数据的存活时间,使数据的价值最大化。当然数仓的数据是不会删除的,不过会部分业务不需要旧数据,比如用户的画像数据,用户画像是按天按小时更新甚至实时更新,比较旧画像数据继续保存着没价值则需要删除。

  在ClickHouse 中,TTL可以设置值的生命周期,它既可以为整张表设置,也可以为每个列字段单独设置。表级别的 TTL 还会指定数据在磁盘和卷上自动转移的逻辑。TTL 表达式的计算结果必须是 日期(date) 或 日期时间(datetime),如果同时设置了列级别的和表级别的TTL则以先到期的为准。

1.字段级别TTL
当列字段中的值过期时, ClickHouse会将它们替换成数据类型的默认值。如果分区内,某一列的所有值均已过期,ClickHouse会从文件系统中删除此列。ClickHouse的INTERVAL(数据时间间隔)支持的操作有:second(秒),minute(分钟),hour(小时),day(日),week(周),month(月),quarter(季度),year(年)。

示例:

-- 创建时指定 TTL
CREATE TABLE example_table
(
d DateTime,
a Int TTL d + INTERVAL 1 day,
b Int TTL d + INTERVAL 1 day,
c String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(d)
ORDER BY d;
-- 为表中已存在的列字段添加 TTL
ALTER TABLE example_table
MODIFY COLUMN `c` String TTL d + toIntervalDay(1)
-- 修改列字段的 TTL
ALTER TABLE example_table
MODIFY COLUMN
c String TTL d + INTERVAL 1 WEEK;

2.表级别TTL
表可以设置一个用于移除过期行的表达式,以及多个用于在磁盘或卷上自动转移数据片段的表达式。当表中的行过期时,ClickHouse 会删除所有对应的行。

示例:event_date超过一个月的数据自动删除

-- 创建时指定 TTL
CREATE TABLE example_table
(
`event_date` Date,
`uid` Int32,
`name` String
)
ENGINE = AggregatingMergeTree()
PARTITION BY event_date
ORDER BY uid
TTL event_date + toIntervalMonth(1)
SETTINGS index_granularity = 128;
-- 修改表的 TTL,event_date超过三个月的数据自动删除
ALTER TABLE example_table
MODIFY TTL event_date + toIntervalMonth(3);

集群版本:
ALTER TABLE default.example_table on cluster ck_cluster MODIFY TTL event_date + toIntervalMonth(3); // 保存三个月

Clickhouse之数据删除方式的更多相关文章

  1. EntityFramework中常用的数据删除方式

    最近在学EF,目前了解到删除操作有三种方式, 第一,官方推荐的先查询数据,再根据查询的对象,删除对象. 这是第一种,官方推荐 第二,自己创建一个对象,然后附加,然后删除. 这是第二种 第三,自己创建对 ...

  2. [转]EntityFramework中常用的数据修改方式

    本文转自:http://blog.csdn.net/itmaxin/article/details/47662151 上一篇文章里提到了 EntityFramework中常用的数据删除方式,那么修改对 ...

  3. EntityFramework中经常使用的数据改动方式

    上一篇文章里提到了 EntityFramework中经常使用的数据删除方式.那么改动对象值也有多种方式 第一种 相同是官方推荐的方式,先查询出来,再对要改动的字段赋值,这也应该是用的比較多的. 另外一 ...

  4. sql有几种删除表数据的方式

    有几种删除表数据的方式? truncate.delete和drop都可以删除数据. TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. TRUNCATE TABLE 与没有 WHE ...

  5. ADO.NET编程之美----数据访问方式(面向连接与面向无连接)

    最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...

  6. Design7:数据删除设计

    在设计一个新系统的Table Schema的时候,不仅需要满足业务逻辑的复杂需求,而且需要考虑如何设计schema才能更快的更新和查询数据,减少维护成本. 模拟一个场景,有如下Table Schema ...

  7. Android数据存储方式--SharedPreferences

    Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...

  8. 压缩Sqlite数据文件大小,解决数据删除后占用空间不变的问题

    最近有一网站使用Sqlite数据库作为数据临时性的缓存,对多片区进行划分 Sqlite数据库文件,每天大概新增近1万的数据量,起初效率有明显的提高,但历经一个多月后数据库文件从几K也上升到了近160M ...

  9. iOS 应用数据存储方式(XML属性列表-plist)

    iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...

  10. SQL表关联赋值、系统表、表数据删除

    1. 表与表的关联赋值(用于表与表之间有关联字段,数据互传) 双表关联赋值 UPDATE #B SET #B.D=#A.B from #B inner join #A on #B.C=#A.A 多表关 ...

随机推荐

  1. Innodb 单表索引查询和连接查询效率分析

    一.MySQL查询访问方法 mysql执行查询语句的方式叫做访问方法或访问类型,这些访问类型具体为 const.ref.range.index.all等. 同一个查询语句可以使用多种不同的访问方法来执 ...

  2. C#/.NET/.NET Core优质学习资料,干货收藏!

    前言 今天大姚给大家分享一些C#/.NET/.NET Core优质学习资料,希望可以帮助到有需要的小伙伴. 什么是 .NET? .NET 是一个免费的.跨平台的.开源开发人员平台,用于构建许多不同类型 ...

  3. Java是值传递还是引用传递,又是怎么体现的

    关于Java是值传递还是引用传递,可以从代码层面来实现一下拿到结果 执行下面的代码: public static void main(String[] args) { int num = 10; St ...

  4. FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24

    在许多实际应用中,相对于反映类别之间微妙差异的细粒度标签,我们更容易获取粗粒度标签.然而,现有方法无法利用粗标签以无监督的方式推断细粒度标签.为了填补这个空白,论文提出了FALCON,一种从粗粒度标记 ...

  5. C#阿里境外服务器部署企业邮箱发邮件代码

    static string accountName = "发件人邮箱"; static string password = "发件人邮箱密码"; static ...

  6. C# .net 6 Log4net 安装、配置 以及相关问题处理

    安装log4net 首先下载相关Nuget包 安装的时候注意项目的.net版本,我这里使用的是.net 6 在根目录下面新建一个配置文件 log4net.config,并且添加下面相关配置项目 < ...

  7. 支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验

    背景 在日常的购物转账.生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用.寻找应用.寻找扫码入口,才能完 ...

  8. MyBatis动态增改,多字段模糊查询

    示例: insert insert into bargain_products <trim prefix="(" suffix=")" suffixOve ...

  9. k8s的容器的webssh实现

    Vite2.x + Vue3.x + Xtermjs4 相关信息 编程语言:TypeScript 4.x + JavaScript 构建工具:Vite 2.x 前端框架:Vue 3.x 路由工具:Vu ...

  10. 嘟嘟牛在线登陆加密分析-RPC调用

    加密参数 JADX反编译后搜索代码 user/login 基本可以确定就是从这里发起网络请求 跟进 addRequestMap 方法分析 这一看逻辑就清晰了 先添加一个时间戳,在对sign进行加密后在 ...