@@ -318,19 +318,44 @@ case class PreparedDeltaFileIndex(
318
318
override def matchingFiles (
319
319
partitionFilters : Seq [Expression ],
320
320
dataFilters : Seq [Expression ]): Seq [AddFile ] = {
321
- val actualFilters = ExpressionSet (partitionFilters ++ dataFilters)
322
- if (preparedScan.allFilters == actualFilters) {
323
- preparedScan.files.distinct
321
+ val currentFilters = ExpressionSet (partitionFilters ++ dataFilters)
322
+ val (addFiles, eventData) = if (currentFilters == preparedScan.allFilters ||
323
+ currentFilters == preparedScan.filtersUsedForSkipping) {
324
+ // [[DeltaScan]] was created using `allFilters` out of which only `filtersUsedForSkipping`
325
+ // filters were used for skipping while creating the DeltaScan.
326
+ // If currentFilters is same as allFilters, then no need to recalculate files and we can use
327
+ // previous results.
328
+ // If currentFilters is same as filtersUsedForSkipping, then also we don't need to recalculate
329
+ // files as [[DeltaScan.files]] were calculates using filtersUsedForSkipping only. So if we
330
+ // recalculate, we will get same result. So we should use previous result in this case also.
331
+ val eventData = Map (
332
+ " reused" -> true ,
333
+ " currentFiltersSameAsPreparedAllFilters" -> (currentFilters == preparedScan.allFilters),
334
+ " currentFiltersSameAsPreparedFiltersUsedForSkipping" ->
335
+ (currentFilters == preparedScan.filtersUsedForSkipping)
336
+ )
337
+ (preparedScan.files.distinct, eventData)
324
338
} else {
325
339
logInfo(
326
340
s """
327
341
|Prepared scan does not match actual filters. Reselecting files to query.
328
342
|Prepared: ${preparedScan.allFilters}
329
- |Actual: ${actualFilters }
343
+ |Actual: ${currentFilters }
330
344
""" .stripMargin)
331
- preparedScan.scannedSnapshot.filesForScan(
345
+ val eventData = Map (
346
+ " reused" -> false ,
347
+ " preparedAllFilters" -> preparedScan.allFilters.mkString(" ," ),
348
+ " preparedFiltersUsedForSkipping" -> preparedScan.filtersUsedForSkipping.mkString(" ," ),
349
+ " currentFilters" -> currentFilters.mkString(" ," )
350
+ )
351
+ val files = preparedScan.scannedSnapshot.filesForScan(
332
352
projection = Nil , partitionFilters ++ dataFilters).files
353
+ (files, eventData)
333
354
}
355
+ recordDeltaEvent(deltaLog,
356
+ opType = " delta.preparedDeltaFileIndex.reuseSkippingResult" ,
357
+ data = eventData)
358
+ addFiles
334
359
}
335
360
336
361
/**
0 commit comments