pushFilters (DataSourceReader)
データソースにプッシュダウンできるフィルタのリストを引数として呼び出します。
フィルターのリストは、各要素のAND演算として解釈されるべきである。
フィルタプッシュダウンにより、データソースはフィルタのサブセットを処理できるようになります。これにより、Sparkが処理する必要のあるデータ量を削減することで、パフォーマンスを向上させることができます。
このメソッドは、クエリプランニング中に一度だけ呼び出されます。デフォルトでは、すべてのフィルターが返されます。これは、フィルターを下位にプッシュダウンできないことを示しています。サブクラスはこのメソッドをオーバーライドして、フィルタプッシュダウンを実装できます。
この方法は、データベースやGraphQL APIsなど、フィルタリングをネイティブにサポートするデータソースに対してのみ実装することをお勧めします。
構文
pushFilters(filters: List[Filter])
パラメーター
パラメーター | Type | 説明 |
|---|---|---|
| フィルターのリスト | データソースにプッシュダウンするフィルターのリスト。 |
戻り値
Iterable[Filter]
データソースのスキャン後もSparkによる評価が必要なフィルター。これには、サポートされていないフィルターや部分的にしかプッシュされていないフィルターが含まれます。返されるフィルタはすべて、参照によって入力フィルタのいずれかと一致する必要があります。
注意
このメソッドはselfを変更することが許可されています。その対象物は、漬物に適した状態を維持しなければならない。selfに対する変更は、 partitions()およびread()メソッドから参照可能です。
例
フィルターの例と、結果としてpushFiltersに渡される引数:
フィルター | プッシュダウン論証 |
|---|---|
|
|
|
|
|
|
|
|
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