使用可向下推送到数据源的筛选器列表调用。
筛选器列表应解释为元素的 AND。
筛选器下推允许数据源处理筛选器的子集。 这可以通过减少 Spark 需要处理的数据量来提高性能。
此方法在查询规划过程中调用一次。 默认情况下,它返回所有筛选器,指示无法向下推送任何筛选器。 子类可以重写此方法来实现筛选器下推。
建议仅针对本机支持筛选的数据源(例如数据库和 GraphQL API)实现此方法。
Syntax
pushFilters(filters: List[Filter])
参数
| 参数 | 类型 | 说明 |
|---|---|---|
filters |
筛选器列表 | 要向下推送到数据源的筛选器列表。 |
退货
Iterable[Filter]
数据源扫描后仍需由 Spark 评估的筛选器。 这包括不受支持的筛选器和部分推送的筛选器。 每个返回的筛选器都必须是按引用的输入筛选器之一。
备注
允许此方法修改 self。 该对象必须保持可选取性。 对self和partitions()方法可见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