PushFilters (DataSourceReader)

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

La liste des filtres doit être interprétée comme l’AND des éléments.

Le transfert vers le bas des filtres 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 des requêtes. Par défaut, il retourne tous les filtres, ce qui indique qu’aucun filtre ne peut être poussé vers le bas. Les sous-classes peuvent remplacer cette méthode pour implémenter un pushdown de filtre.

Il est recommandé d’implémenter cette méthode uniquement pour les sources de données qui prennent en charge le filtrage en mode natif, comme les bases de données et les API GraphQL.

Syntaxe

pushFilters(filters: List[Filter])

Paramètres

Paramètre Type Description
filters liste des filtres Liste des filtres à pousser vers la source de données.

Retours

Iterable[Filter]

Filtres qui doivent toujours être évalués par Spark après l’analyse de la source de données. Cela inclut des filtres non pris en charge et des filtres partiellement envoyés( push). Chaque filtre retourné doit être l’un des filtres d’entrée par référence.

Remarques

Cette méthode est autorisée à modifier self. L’objet doit rester picklable. Les modifications à self apporter sont visibles par les méthodes et partitions() les read() méthodes.

Exemples

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

Filtres Arguments 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 pour prendre en pushFilters charge EqualTo les filtres uniquement :

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