Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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