use*_*942 5 apache-spark databricks delta-lake
在许多数据湖中,我看到数据按年、月、日进行分区,例如:
year=2019 / month=05 / day=15
Run Code Online (Sandbox Code Playgroud)
与简单地按日期分区相比,这样做有什么优点?例如:
date=20190515
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一优势是,例如,分析师想要查询特定月份/年份的所有数据。如果只是按日期分区,那么他们必须编写一个对分区键进行计算的查询,例如下面的伪代码:
SELECT * FROM myTable WHERE LEFT(date,4) = 2019
Run Code Online (Sandbox Code Playgroud)
Spark 仍然能够对上述查询进行分区修剪吗?更嵌套的分区结构还有其他我没有考虑到的优点吗?
谢谢
我认为这是一个缺点!因为分割日期部分会使日期过滤变得更加困难。例如,假设您要查询最近 10 天的可能跨月边界的数据?使用单个日期值,您可以运行简单的查询,例如
...where date >= current_date() - interval 10 days
Spark 将为您找出正确的分区。Spark 还可以处理其他日期函数,例如year(date) = 2019or month(date) = 2,并且它会再次正确地为您进行分区修剪。
我总是鼓励使用单个日期列进行分区。让 Spark 来完成这项工作。
另外,要记住的重要一点是日期格式应该是yyyy-MM-dd.
| 归档时间: |
|
| 查看次数: |
2399 次 |
| 最近记录: |