pushFilters(DataSourceReader)

會用可以推送到資料來源的篩選器清單來呼叫。

過濾器清單應解釋為元素的 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