pushFilters (DataSourceReader)

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