Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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