Aller au contenu principal

pushFilters (DataSourceReader)

Appelé avec la liste des filtres qui peuvent être transférés vers la source de données.

La liste des filtres doit être interprétée comme le ET des éléments.

Le filtrage pushdown permet à la source de données de gérer un sous-ensemble de filtres. Cela peut améliorer les performances en réduisant la quantité de données qui doivent être traitées par Spark.

Cette méthode est appelée une fois pendant la planification de la query. Par default, il renvoie tous les filtres, indiquant qu'aucun filtre ne peut être transféré. Les sous-classes peuvent redéfinir cette méthode pour implémenter le report de filtre.

Il est recommandé de mettre en œuvre cette méthode uniquement pour les sources de données qui prennent en charge le filtrage en mode natif, telles que les bases de données et les APIs GraphQL.

Syntaxe

pushFilters(filters: List[Filter])

parameter

parameter

Type

Description

filters

liste de filtres

La liste des filtres à répercuter sur la source de données.

parameter

Type

Description

filters

liste de filtres

La liste des filtres à répercuter sur la source de données.

Renvoie

Iterable[Filter]

Filtres qui doivent encore être évalués par Spark après l'analyse de la source de données. Ceci inclut les filtres non pris en charge et les filtres partiellement poussés. Chaque filtre renvoyé doit être l'un des filtres d'entrée par référence.

Notes

Cette méthode est autorisée à modifier self. L'objet doit rester sérialisable. Les modifications apportées à self sont visibles par les méthodes partitions() et read().

Exemples

Exemple de filtres et les arguments résultants passés à pushFilters:

Filtres

Arguments de 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)]

Filtres

Arguments de 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)]

Implémentez pushFilters pour prendre en charge uniquement les filtres EqualTo :

Python
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