按年/月/日而不是仅按日期划分 delta / spark table 有什么好处?

What is the advantage of partitioning a delta / spark table by year / month / day, rather than just date?

在许多数据湖中,我看到数据按年、月、日分区,例如:

year=2019 / month=05 / day=15

这样做与简单地按日期分区相比有什么优势?例如:

date=20190515

我能想到的唯一优势是,例如,如果分析师想要查询特定 month/year 的所有数据。如果只是按日期分区,那么他们将不得不编写一个计算分区键的查询,例如下面的伪代码:

SELECT * FROM myTable WHERE LEFT(date,4) = 2019

spark 是否仍然能够对上述查询进行分区修剪? 还有什么我没有考虑到更嵌套的分区结构的其他优点吗?

谢谢

我认为这是一个缺点!因为拆分日期部分会使日期过滤变得更加困难。例如,您要查询可能跨月边界的最近 10 天的数据?使用单个日期值,您可以 运行 简单查询,例如

...where date >= current_date() - interval 10 days

Spark 会为您找出正确的分区。 Spark 还可以处理其他日期函数,例如 year(date) = 2019month(date) = 2,它会再次正确地为您执行分区 p运行ing。

我总是鼓励使用单个日期列进行分区。让 Spark 代劳。

此外,需要牢记的重要一点是日期格式应为 yyyy-MM-dd