會用可以推送到資料來源的篩選器清單來呼叫。
過濾器清單應解釋為元素的 AND。
篩選下推可讓數據源處理篩選子集。 這可藉由減少 Spark 需要處理的數據量來改善效能。
這個方法會在查詢規劃期間呼叫一次。 預設情況下,它會回傳所有篩選器,表示無法向下推任何篩選器。 子類別可以覆寫此方法以實作濾波器推下。
建議僅在原生支援過濾的資料來源(如資料庫和 GraphQL API)實作此方法。
語法
pushFilters(filters: List[Filter])
參數
| 參數 | 類型 | 說明 |
|---|---|---|
filters |
Filter 列表 | 篩選條件清單要推送到資料來源。 |
退貨
Iterable[Filter]
這些篩選器在資料來源掃描後仍需由 Spark 評估。 這包括不支援的濾波器和部分推送濾波器。 每個回傳的濾波器必須是參考中的輸入濾波器之一。
Notes
此方法允許修改 self。 該物件必須保持可拾取狀態。
self修改內容可見partitions()於 and read() 方法。
Examples
範例濾波器及其傳遞給 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