Compaction可以把所有的数据文件按照一定策略进行Merge操作,可提升查询效率。
功能介绍
Transactional Table 2.0支持近实时增量写入和timetravel查询特性,在数据频繁写入的场景中,必然会引入大量的小文件,需要设计合理高效的合并策略来对小文件进行合并以及数据去重,解决大量小文件读写IO低效以及缓解存储系统的压力,但也要避免频繁Compact引发严重的写放大和冲突失败。
目前主要支持两种数据合并方式:
-
Clustering:只是把Commit的DeltaFile合并成一个大文件,不改变数据内容。系统内部会根据新增的文件大小、文件数量等因素周期性地执行,不需要用户手动操作。主要解决小文件IO读写效率和稳定性问题。
-
Compaction:会把所有的数据文件按照一定策略进行Merge操作,生成一批新的BaseFile,相同PK的数据行只存储最新的状态,不包含任何历史状态,也不会包含任何系统列信息,因此BaseFile本身不支持timetravel操作,主要用于提升查询效率。支持用户根据业务场景主动触发,也支持通过设置表属性由系统周期性自动触发。
命令格式
alter table [partition
( = '' [, ...])
]
compact major;
注意事项
-
手动执行Compaction需要依赖设置一个flag。
set odps.merge.task.mode=service;
-
Compaction会产生新的文件,虽然可以提升查询效率,但也要承担对应的数据文件存储成本,您需要根据业务场景进行权衡,选择合适的触发频率。
使用示例
--创建表
create table mf_tt2 (pk bigint not null primary key, val bigint not null)
partitioned by (dd string, hh string)
tblproperties ("transactional"="true");
--插入数据
insert into table mf_tt2 partition(dd='01', hh='01') values (1, 1), (2, 2);
insert into table mf_tt2 partition(dd='01', hh='01') values (2, 20), (3, 3);
insert into table mf_tt2 partition(dd='01', hh='01') values (3, 30), (4, 4);
--执行compaction,以及操作完成后,可继续查询历史数据。
set odps.merge.task.mode=service;
set odps.merge.quickmerge.flag=false;
alter table mf_tt2 partition(dd='01', hh='01') compact major;
select * from mf_tt2 timestamp as of get_latest_timestamp('tt2') where dd='01' and hh='01';
select * from mf_tt2 timestamp as of get_latest_timestamp('tt2', 2) where dd='01' and hh='01';
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/158947.html
赞 (0)
阿里云云原生大数据计算服务 MaxComputeTunnel常见错误码-云淘科技
上一篇
2023年12月10日
阿里云云原生大数据计算服务 MaxCompute数据迁移-云淘科技
下一篇
2023年12月10日
详情页2
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。