pushFilters (DataSourceReader)

使用可向下推送到数据源的筛选器列表调用。

筛选器列表应解释为元素的 AND。

筛选器下推允许数据源处理筛选器的子集。 这可以通过减少 Spark 需要处理的数据量来提高性能。

此方法在查询规划过程中调用一次。 默认情况下,它返回所有筛选器,指示无法向下推送任何筛选器。 子类可以重写此方法来实现筛选器下推。

建议仅针对本机支持筛选的数据源(例如数据库和 GraphQL API)实现此方法。

Syntax

pushFilters(filters: List[Filter])

参数

参数 类型 说明
filters 筛选器列表 要向下推送到数据源的筛选器列表。

退货

Iterable[Filter]

数据源扫描后仍需由 Spark 评估的筛选器。 这包括不受支持的筛选器和部分推送的筛选器。 每个返回的筛选器都必须是按引用的输入筛选器之一。

备注

允许此方法修改 self。 该对象必须保持可选取性。 对selfpartitions()方法可见read()的修改。

示例

示例筛选器和传递给 pushFilters以下结果的参数:

筛选器 下推参数
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