epa*_*095 4 databricks delta-lake
设置:Delta-lake、powerbi 使用的 Databricks SQL 计算。我想知道以下场景:我们有一个列timestamp和一个派生列date(即 的日期timestamp),并且我们选择partitionby日期。当我们查询时,我们使用timestamp过滤器,而不是日期。
我的理解是,databrikcs 先验不会连接时间戳和日期,并且似乎不会获得分区的任何优势。但由于文件实际上是按时间戳(隐式)分区的,因此当databricks查看所有文件的最小/最大时间戳时,它会发现它毕竟可以跳过大多数文件。因此,即使分区位于我们在查询中未明确使用的列上,我们似乎也可以从分区中获得很大的好处。
是的,Databricks 将通过数据跳过隐式利用此分区,因为会有与特定数据文件关联的最小/最大统计信息。最小/最大信息将从事务日志加载到内存中,但需要决定每个查询需要命中哪些文件。但由于所有内容都在内存中,因此在拥有数十万个文件之前,性能开销应该不会很大。
您可能会考虑的一件事 - 使用生成的列而不是显式date列。将其声明为date GENERATED ALWAYS AS (CAST(timestampColumn AS DATE)),并按其分区。优点是,当您对 进行查询时timestampColumn,它应该date自动对列进行分区过滤。
| 归档时间: |
|
| 查看次数: |
2500 次 |
| 最近记录: |