Compartilhar via


pushFilters (DataSourceReader)

Chamado com a lista de filtros que podem ser enviados por push para a fonte de dados.

A lista de filtros deve ser interpretada como o AND dos elementos.

O pushdown de filtro permite que a fonte de dados lide com um subconjunto de filtros. Isso pode melhorar o desempenho reduzindo a quantidade de dados que precisam ser processados pelo Spark.

Este método é executado uma vez durante o planejamento da consulta. Por padrão, ele retorna todos os filtros, indicando que nenhum filtro pode ser enviado por push para baixo. As subclasses podem substituir esse método para implementar o pushdown de filtro.

É recomendável implementar esse método apenas para fontes de dados que dão suporte nativo à filtragem, como bancos de dados e APIs do GraphQL.

Sintaxe

pushFilters(filters: List[Filter])

Parâmetros

Parâmetro Tipo Descrição
filters lista de Filtro A lista de filtros a serem enviados por push para a fonte de dados.

Devoluções

Iterable[Filter]

Filtros que ainda precisam ser avaliados pelo Spark após a verificação da fonte de dados. Isso inclui filtros sem suporte e filtros parcialmente enviados por push. Cada filtro retornado deve ser um dos filtros de entrada por referência.

Observações

Esse método tem permissão para modificar self. O objeto deve permanecer picklable. As modificações são self visíveis aos métodos e partitions() aos read() métodos.

Exemplos

Filtros de exemplo e os argumentos resultantes passados para pushFilters:

Filtros Argumentos 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)]

Implemente pushFilters apenas para dar suporte EqualTo a filtros:

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