apache-spark - 对于 Delta Lake 上的 FACT 表,是否与按业务日期和摄取日期进行分区有关?
问题描述
我正在处理一个数据工程案例,其中我有一个Table_Movie
由ingest date
. 现在,我不时收到一些旧数据。我需要基于business date
.
例如: 今天,我收到了与日期 12/05/2020 对应的新数据:
- 我需要删除12/05/2020
Table_Movie
对应的数据business date
- 删除旧数据后,我需要插入对应于12/05/2020的新数据。
按ingest date
and business date
分区会提高性能吗?:
==> eg. Table_Movie/ingestdate=20220812/business_date=20200512/
ingest date
注意:出于其他原因,我们需要保留分区。
如果您有任何建议或指导,请告诉我
解决方案
如果您只是偶尔收到旧数据,那么按业务日期分区可能会得到非常小的文件,这会影响性能。Databricks 上的 Delta 使用多种优化技术来避免读取不必要的数据。其中一项技术是数据跳过- 当写入数据时,Delta 将记录索引列的最小值和最大值,因此当在索引列上读取条件时,驱动程序将根据该索引检查值,并跳过没有数据的文件. 默认情况下,前 N 列启用数据跳过(默认为 32,可配置),因此您需要确保业务日期列位于列列表的开头。
推荐阅读
- php - phpseclib SSH2写入不执行长命令
- angular - 将选定的用户数据传递到另一个页面(Angular)
- batch-file - Imap:使用一个命令从电子邮件中获取多个部分
- mysql - 如何从 sql 文件中删除图像代码?有没有转换器或工具?
- spring-batch - Spring Batch 验证行并在验证失败时发送电子邮件
- javascript - 在新选项卡中打开 iframe 内容时,使其在位于页面内的 iframe 中打开
- git - 如何将压缩的提交从 master 传播到开发和功能分支
- jquery - 如何触发 ul 中包含的 div 的点击事件
- scikit-learn - 使用 scikit-learn 按顺序排列所有特征
- java - 如何提高 Android Opencv 相机 FPS?