验证collect_set后的数据是否比摊开的数据占用空间小?
文件格式:parquet
去重记录数:776885759
验证方式:
读取用户日志表,A表记录用户id和日志时间的去重记录,B表把用户id和该用户对应的日志时间的数组作为一行来记录。B表展开后与A表相同。两表存储的数据量是相同的。最后观察A表和B表的磁盘占用空间是否相同。
实现结论:
A表占用10.9G,B表占用4.7G,说明collect_set后的数据占用空间更小,节省磁盘空间57%。
表A占用空间
表B占用空间
-- 表A:
create table music_db_test.tmp_xxt_20211012_dwd_user_action_impress_d_1
stored as parquet
as
select distinct user_id,log_time
from music_iplay.dwd_user_action_impress_d
where dt='2021-10-11';
-- 表B:
create table music_db_test.tmp_xxt_20211012_dwd_user_action_impress_d_2
stored as parquet
as
select user_id,collect_set(log_time) as log_time_array
from music_iplay.dwd_user_action_impress_d
where dt='2021-10-11'
group by user_id;