Freigeben über


pushFilters (DataSourceReader)

Wird mit der Liste der Filter aufgerufen, die an die Datenquelle übertragen werden können.

Die Liste der Filter sollte als AND der Elemente interpretiert werden.

Mithilfe des Filter-Pushdowns kann die Datenquelle eine Teilmenge von Filtern verarbeiten. Dies kann die Leistung verbessern, indem die Datenmenge reduziert wird, die von Spark verarbeitet werden muss.

Diese Methode wird einmal während der Abfrageplanung aufgerufen. Standardmäßig werden alle Filter zurückgegeben, die angeben, dass keine Filter gedrückt werden können. Unterklassen können diese Methode überschreiben, um Filter-Pushdown zu implementieren.

Es wird empfohlen, diese Methode nur für Datenquellen zu implementieren, die das Filtern nativ unterstützen, z. B. Datenbanken und GraphQL-APIs.

Syntax

pushFilters(filters: List[Filter])

Parameter

Parameter Typ Beschreibung
filters Liste der Filter Die Liste der Filter, die an die Datenquelle übertragen werden sollen.

Rückkehr

Iterable[Filter]

Filter, die nach der Datenquellenüberprüfung noch von Spark ausgewertet werden müssen. Dazu gehören nicht unterstützte Filter und teilweise pushte Filter. Jeder zurückgegebene Filter muss einen der Eingabefilter nach Verweis sein.

Hinweise

Diese Methode darf geändert werden self. Das Objekt muss ausgewählt bleiben. Änderungen, die self für die partitions() Und read() Methoden sichtbar sind.

Beispiele

Beispielfilter und die resultierenden Argumente, die an pushFilters:

Filter Pushdownargumente
a = 1 and b = 2 [EqualTo(("a",), 1), EqualTo(("b",), 2)]
a = 1 or b = 2 []
a = 1 or (b = 2 and c = 3) []
a = 1 and (b = 2 or c = 3) [EqualTo(("a",), 1)]

Implementieren, pushFilters um nur Filter zu unterstützen EqualTo :

def pushFilters(self, filters):
    for filter in filters:
        if isinstance(filter, EqualTo):
            # Save supported filter for handling in partitions() and read()
            self.filters.append(filter)
        else:
            # Unsupported filter
            yield filter