CarbonData的修改和删除怎么实现

发布时间:2021-12-16 16:22:38 作者:iii
来源:亿速云 阅读:170

这篇文章主要介绍“CarbonData的修改和删除怎么实现”,在日常操作中,相信很多人在CarbonData的修改和删除怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CarbonData的修改和删除怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

CarbonData是由华为开发、开源并支持Apache  Hadoop的列式存储文件格式,支持索引、压缩以及解编码等,其目的是为了实现同一份数据达到多种需求,而且能够实现更快的交互查询。目前该项目正处于Apache孵化过程中。

当前,CarbonData暂不支持修改表中已经存在的数据。但是在现实情况下,我们可能很希望这个功能,比如修改维度表,事实表的数据校正以及数据清洗等。很多使用CarbonData的用户很希望其能够提供数据的修改和删除功能。为此,社区已经有人提了Issue(CARBONDATA-440),其目标就是为CarbonData提供Update/Delete功能,这个功能应该会在CarbonData  0.3.0版本发布。本文将介绍CarbonData的Update/Delete功能设计实现。下面是实现这个功能的高层次设计目标:

(1)、提供标准的SQL接口,以便能够执行更新和删除操作;

(2)、对CarbonData表执行更新和删除操作的时候,不需要对已经存在的整个CarbonData块重写,而是将修改写到差异文件中(differential  files);

(3)、在更新和删除操作之后,CarbonData  readers应该能够跳过删除的记录,并且能够无缝地读取更新的记录,而这些操作不需要用户更新自己的应用程序。

更新操作实现

我们都知道,CarbonData的数据是存储在HDFS之上,而HDFS中的文件是不可修改的(immutable),所以CarbonData的数据块并不能原地进行修改。更新数据的一种方法就是删除和重写整个数据块。然而这种方法的效率很低,会导致性能瓶颈。其实我们可以把更新操作认为是先"删除",然后"插入",这也就是CarbonData中更新的实现。下面我将详细地介绍CarbonData的更新操作实现:CarbonData的更新操作分为以下两步:

CarbonData的修改和删除怎么实现

1、***步包括两个部分:

(1)、首先,CarbonData能够通过执行过滤和Join操作识别出需要更新的行。为了能够***标识行数据,CarbonData会使用到ROWID属性。一旦需要更新的数据被标识后,这些数据将会在单独的文件中被标识为deleted,而且这些文件是存放在当前表的目录下,这些文件被称为"Delete  Delt"。

(2)、然后,CarbonData将会从源表中收集需要更新的列值并组成新的一行。新的行数据是由更新后的列值和目标表现有的列值数据组成的。这些更新的行数据将会在Spark处理层组成一个源RDD。

2、第二步:CarbonData将会使用现有的数据加载方法将源RDD中的行数据转换成CarbobData数据格式。这个操作类似于数据的增量加载。这个新创建的CarbonData文件称为"Update  Delta"。Update Delta文件将存储在同一个segment中,而且Update  Delta本身拥有btree和块级别的统计,正如正常的CabonData文件。这个新的btree应该追加到全局的btree中,并且缓存起来。

下面就是CabonData更新操作的时序图:

CarbonData的修改和删除怎么实现

删除操作的实现

在删除数据的情况,CarbonData也是通过过滤和Join操作来识别需要删除的行。为了能够***标识行数据,CarbonData会使用到ROWID属性。一旦需要删除的数据被标识后,这些数据将会在单独的文件中被标识为deleted,这个文件也称为"Delete  Delta"文件。CarbonData记录扫描程序将会把这些删除的文件排除到结果集之外。在删除操作之后,CarbonData不需要更新全局字典表,因为字典表中有些entries对其他的segment还是有效的。

删除操作的原子性

CarbonData的删除操作具有原子性,也就是说,删除的数据要么全部被删除,要么全部都没删除。删除操作产生的Delete  delta文件在删除操作仍然进行时,对readers事不可见的;只有删除操作成功进行,新删除的行数据才会对readers可见。删除的操作如下图所示:

CarbonData的修改和删除怎么实现

下面就是CabonData删除操作的时序图:

CarbonData的修改和删除怎么实现

文件合并

对每次更新操作,都会产生update delta 和 delete  delta文件,随着频繁地更新和删除操作,会产生越来越多的delta文件。这将会产生许多小文件,这可能会影响scan操作的性能,所以我们需要将这些delta文件合并成单独的delta文件。将许多个delta文件合并成一个delta文件的操作称为compaction或  minor compaction. 操作如下:

CarbonData的修改和删除怎么实现

而且compaction操作可以通过配置达到多少个delta  files来触发。在删除或者更新操作之后,如果delta文件的数量达到了配置的阈值,compaction操作将会触发。

到此,关于“CarbonData的修改和删除怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. iptables规则的查看、添加、删除和修改
  2. JAVA 添加、修改和删除PDF书签

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

carbondata

上一篇:Spring Boot是怎么实现日志的

下一篇:怎么解析Python中的Dict

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》