pushFilters (DataSourceReader)

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

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

A aplicação de filtros permite que a fonte de dados trate um subconjunto de filtros. Isso pode melhorar o desempenho, reduzindo a quantidade de dados que precisam ser processados pelo Spark.

Esse método é chamado uma vez durante o planejamento da consulta. Por defeito, devolve todos os filtros, indicando que nenhum filtro pode ser pressionado para baixo. Subclasses podem sobrepor este método para implementar o filtro pushdown.

Recomenda-se implementar este método apenas para fontes de dados que suportam filtragem nativamente, como bases de dados e APIs GraphQL.

Sintaxe

pushFilters(filters: List[Filter])

Parâmetros

Parâmetro Tipo Descrição
filters lista de Filter A lista de filtros a pressionar para a fonte de dados.

Devoluções

Iterable[Filter]

Filtros que ainda precisam de ser avaliados pelo Spark após a varredura da fonte de dados. Isto inclui filtros não suportados e filtros parcialmente empurrados. Cada filtro devolvido deve ser um dos filtros de entrada por referência.

Notes

Este método pode modificar self. O objeto deve permanecer em pickling. Modificações para self são visíveis para os partitions() e read() métodos.

Exemplos

Exemplos de filtros e os argumentos resultantes passados para pushFilters:

Filtros Argumentos de pressão
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)]

Implementar pushFilters para suportar EqualTo apenas 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