Condividi tramite


pushFilters (DataSourceReader)

Chiamato con l'elenco di filtri che possono essere inseriti nell'origine dati.

L'elenco dei filtri deve essere interpretato come AND degli elementi.

Il pushdown del filtro consente all'origine dati di gestire un sottoinsieme di filtri. Ciò può migliorare le prestazioni riducendo la quantità di dati che devono essere elaborati da Spark.

Questo metodo viene chiamato una volta durante la pianificazione delle query. Per impostazione predefinita, restituisce tutti i filtri, a indicare che non è possibile eseguire il push dei filtri. Le sottoclassi possono eseguire l'override di questo metodo per implementare il pushdown del filtro.

È consigliabile implementare questo metodo solo per le origini dati che supportano il filtro in modo nativo, ad esempio database e API GraphQL.

Sintassi

pushFilters(filters: List[Filter])

Parametri

Parametro Tipo Descrizione
filters elenco di filtri Elenco di filtri di cui eseguire il push verso il basso nell'origine dati.

Restituzioni

Iterable[Filter]

I filtri che devono comunque essere valutati da Spark dopo l'analisi dell'origine dati. Sono inclusi filtri non supportati e filtri parzialmente inseriti. Ogni filtro restituito deve essere uno dei filtri di input per riferimento.

Note

Questo metodo può modificare self. L'oggetto deve rimanere selezionabile. Le modifiche apportate a self sono visibili ai partitions() metodi e read() .

Examples

Filtri di esempio e argomenti risultanti passati a pushFilters:

Filtri Argomenti di pushdown
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)]

Implementare pushFilters per supportare EqualTo solo i filtri:

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