隐藏分区和分区演变

与其他数据湖产品相比,Iceberg提供了对隐藏分区和分区演变的支持。在深入了解隐藏分区和分区演变之前,先来重温一下分区的概念。

分区概念

分区是一种编写时通过将相似的行分组在一起来加快查询速度的方法。例如,对logs日志表中的日志项的查询通常包含一个时间范围,例如对上午10点到12点之间的日志的查询,可以使用的SQL语句如下:

SELECT level, message FROM logs
WHERE event_time BETWEEN '2018-12-01 10:00:00' AND '2018-12-01 12:00:00'

将logs表配置为按event_time日期分区将会把日志事件分组到具有相同事件日期的文件中。Iceberg会跟踪这个日期,并使用它来跳过没有有用数据的其他日期的文件。

Iceberg可以按年、月、日和小时粒度对时间戳分区。它还可以使用分类列(如logs表中的level列,代表日志级别)将行存储在一起,从而加快查询速度。

与其他支持分区的表格式如Hive相比,Iceberg还支持隐藏分区。什么是隐藏分区?

(1) Iceberg负责处理为表中的行生成分区值的繁琐且容易出错的任务。

(2) Iceberg避免自动读取不必要的分区。使用者不需要知道表是如何分区的,也不需要在查询中添加额外的过滤器。

(3) Iceberg分区布局可以根据需要发展演化。

为了进一步理解Iceberg支持的隐藏分区,考虑一下Hive是如何实现和管理分区的。

Hive分区

在Hive中,分区是显式的,以列的形式出现,所以logs分区表中会有一个名为event_date的列。在每次写表时都必须 ......

......

抱歉,只有登录会员才可浏览!会员登录


《Spark原理深入与编程实战》