pushFilters (DataSourceReader)

Anropas med listan över filter som kan skickas ned till datakällan.

Listan över filter ska tolkas som ELEMENTens AND.

Filter pushdown gör att datakällan kan hantera ett urval av filter. Detta kan förbättra prestandan genom att minska mängden data som behöver bearbetas av Spark.

Den här metoden anropas en gång under frågeplaneringen. Som standard returneras alla filter som anger att inga filter kan tryckas ned. Underklasser kan åsidosätta den här metoden för att implementera filter-pushdown.

Vi rekommenderar att du endast implementerar den här metoden för datakällor som har inbyggt stöd för filtrering, till exempel databaser och GraphQL-API:er.

Syntax

pushFilters(filters: List[Filter])

Parameters

Parameter Type Beskrivning
filters lista över filter Listan över filter som ska push-överföras till datakällan.

Retur

Iterable[Filter]

Filter som fortfarande måste utvärderas av Spark efter datakällans genomsökning. Detta inkluderar filter som inte stöds och delvis push-överförda filter. Varje returnerat filter måste vara ett av indatafiltren efter referens.

Notes

Den här metoden kan ändra self. Objektet måste vara valbart. Ändringar i self är synliga för partitions() metoderna och read() .

Exempel

Exempelfilter och de resulterande argumenten som skickas till pushFilters:

Filterar Pushdown-argument
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)]

Implementera pushFilters endast för att stödja EqualTo filter:

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