pushFilters (DataSourceReader)

Вызывается со списком фильтров, которые можно отправить в источник данных.

Список фильтров должен быть интерпретирован как И элементов.

Отправка фильтра позволяет источнику данных обрабатывать подмножество фильтров. Это может повысить производительность, уменьшая объем данных, которые должны обрабатываться Spark.

Этот метод вызывается один раз во время планирования запросов. По умолчанию он возвращает все фильтры, указывающие, что фильтры не могут быть отправлены вниз. Подклассы могут переопределить этот метод для реализации pushdown фильтра.

Рекомендуется реализовать этот метод только для источников данных, которые изначально поддерживают фильтрацию, такие как базы данных и API GraphQL.

Синтаксис

pushFilters(filters: List[Filter])

Параметры

Параметр Тип Описание
filters список фильтров Список фильтров для отправки в источник данных.

Возвраты

Iterable[Filter]

Фильтры, которые по-прежнему должны быть оценены Spark после сканирования источника данных. Сюда входят неподдерживаемые фильтры и частично отправляемые фильтры. Каждый возвращаемый фильтр должен быть одним из входных фильтров по ссылке.

Примечания

Этот метод может изменяться self. Объект должен оставаться выбранным. Изменения, которые self отображаются для partitions() методов и read() методов.

Примеры

Примеры фильтров и результирующий аргументы, переданные pushFiltersв :

Фильтры Аргументы 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)]

Реализуйте pushFilters только для поддержки EqualTo фильтров:

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