Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Aangeroepen met de lijst met filters die naar de gegevensbron kunnen worden gepusht.
De lijst met filters moet worden geïnterpreteerd als de AND van de elementen.
Met filterpushdown kan de gegevensbron een subset van filters verwerken. Dit kan de prestaties verbeteren door de hoeveelheid gegevens te verminderen die door Spark moet worden verwerkt.
Deze methode wordt eenmaal aangeroepen tijdens het plannen van query's. Standaard worden alle filters geretourneerd, waarmee wordt aangegeven dat er geen filters omlaag kunnen worden gepusht. Subklassen kunnen deze methode overschrijven om filterpushdown te implementeren.
Het is raadzaam deze methode alleen te implementeren voor gegevensbronnen die systeemeigen ondersteuning bieden voor filteren, zoals databases en GraphQL-API's.
Syntaxis
pushFilters(filters: List[Filter])
Parameterwaarden
| Kenmerk | Typ | Beschrijving |
|---|---|---|
filters |
lijst met filter | De lijst met filters om naar de gegevensbron te pushen. |
Retouren
Iterable[Filter]
Filters die nog steeds door Spark moeten worden geëvalueerd na de scan van de gegevensbron. Dit omvat niet-ondersteunde filters en gedeeltelijk gepushte filters. Elk geretourneerd filter moet een van de invoerfilters per verwijzing zijn.
Aantekeningen
Deze methode mag worden gewijzigd self. Het object moet kiesbaar blijven. Wijzigingen die self zichtbaar zijn voor de partitions() en read() methoden.
Examples
Voorbeeldfilters en de resulterende argumenten die worden doorgegeven aan pushFilters:
| Filteren | Pushdown-argumenten |
|---|---|
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)] |
Alleen implementeren pushFilters ter ondersteuning van EqualTo filters:
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