出力レイヤーを作成するために、入力レイヤーのパーティションのサブセットのみを必要とするタスクがある場合があります。 このような場合は、 CPU 、メモリ、およびネットワーク帯域幅の浪費を避けるために、実行プロセスのできるだけ早い段階で不要なパーティションキーを除外することが一般的に推奨されます。
ほとんどのコンパイルパターンで、コンパイラのフロントエンド実装の入力キーを手動でフィルタリングできますが 、 RefTreeCompiler などの一部のパターンでは、キーをフィルタリングする必要があるかどうかを判断するのが困難な場合があります。 件名または参照 されているパーティションが処理されているかどうかは、通常は不明です。
このような場合、ライブラリは、処理するパーティションのリストからパーティションキーとメタデータを選択するようにパーティションフィルタを設定する方法を提供します。 この設定は次のように機能します。
- RefTreeCompilerでは、サブジェクトパーティションのみがフィルタリングされます。 特に、入力レイヤー自体が、フィルタリングが適用された複数のコンパイラードライバータスクのアップストリーム・コンパイラーの製品である場合には、この点に注意してください。 チェーンの下位にあるコンパイラーが、アップストリーム・コンパイラーによって生成されたレイヤーからのネイバーパーティション名を参照する場合、フィルター処理が、ドライバータスクの次のコンパイルによって参照されるすべてのパーティションを出力するのに十分な許容範囲であることを確認してください。
byId
executor 設定を使用して 、コンパイラーに別のフィルターを設定できます。 here.platform.data-processing.executors.partitionKeyFilters
コンフィグレーションはフィンガープリントの一部です。つまり、このコンフィグレーションを変更すると、コンパイルの非インクリメンタル実行がトリガーされ、確定的な状態が維持されます。 - パーティションキーフィルタは
DeltaSet
、インターフェイスで使用することもできます。 here.platform.data-processing.executors.partitionKeyFilters
で定義されたパーティションキーフィルタは、すべてのquery
変換およびreadBack
DeltaSet 変換で入力パーティションをフィルタリングするために使用されます。
パーティションキーフィルタリングは、で設定 application.conf
できます。 たとえば、このフィルタでは、特定の緯度 / 経度バウンディング ボックスに含まれているパーティションのみを処理するようにタスクを設定できます。
here.platform.data-processing.executors.partitionKeyFilters = [
{
className = "BoundingBoxFilter"
param.boundingBox { north = 24.8, south = 24.68, east = 121.8, west = 121.7 }
}
]
プロパティのルートはリストです。このレベルで指定さOR
れた複数のフィルタが結合 ( ロジック ) として結合されます。 AND
ロジックと組み合わせる必要がある場合 AndFilter
は、ルートの 1 つの下に配置できます。
次の組み込みフィルタのリストが表示されます。
BoundingBoxFilter
AllowListFilter
AndFilter
OrFilter
NotFilter
カスタムフィルタは、を拡張してアプリケーションから適用することもでき PartitionKeyFilter
ます。 これらのフィルターは、から true または false を返し shouldProcess
ます。 ブール型ロジックが適用され、次のようにルートフィルタまで結合されます。
-
Or
2 つの境界ボックスのうちの 1 つが結合です -
And
2 つの境界ボックスのうちの 1 つが交差しています -
Not
2 つのバウンディングボックスのうち、基になるバウンディング ボックスの外部のパーティションのみが考慮されることを意味します
フィルタは、カタログ ID 、レイヤー ID 、パーティション名などのパーティションキーパラメータにのみ適用できます。
注 : パフォーマンス上の理由から、フィルタはパーティション メタデータまたはペイロードに基づいてフィルタリングされません。
特定のコンパイラーのフィルターを上書きします
いずれかのコンパイラーに別のパーティションフィルターを適用する必要がある場合 byId
は、このメカニズムを使用して、そのフィルターをラップするエグゼキューターに別のフィルターのセットを設定できます。 これらのフィルターを上書きすると、結合されないため、既定のフィルターセット全体が置き換えられます。
例 :
here.platform.data-processing.executors.partitionKeyFilters = [
{
className = "BoundingBoxFilter"
param.boundingBox { north = 24.8, south = 24.68, east = 121.8, west = 121.7 }
}
]
here.platform.data-processing.executors.byId {
intermediate-compiler.partitionKeyFilters = [
{
className = "BoundingBoxFilter"
param.boundingBox { north = 24.9, south = 24.58, east = 121.9, west = 121.6 }
}
]
another-compiler.partitionKeyFilters = []
}
特定のレイヤーにのみフィルターを適用します
は AllowListFilter
、パーティション名の固定リストに基づいてフィルタリングするために使用できます。 ブール型操作フィルターと組み合わせて AllowListFilter
使用すると、特定のレイヤーにのみ一部のフィルターを適用することもできます。
たとえば inLayer
、のにのみバウンディング ボックスを適用するには inCatalog
、次のようにアプリケーションを設定します。
here.platform.data-processing.executors.partitionKeyFilters = [
{
className = "NotFilter"
param.operand = {
className = "AllowListFilter"
param.catalogsAndLayers = {"inCatalog": ["inLayer"]}
}
},
{
className = "AndFilter"
param.operands = [
{
className = "AllowListFilter"
param.catalogsAndLayers = {"inCatalog": ["inLayer"]}
}, {
className = "BoundingBoxFilter"
param.boundingBox { north = 2.8, south = 2.68, east = 121.8, west = 121.7 }
}
]
}
]
パーティションキーフィルタの設定の詳細については、「ライブラリの設定」を参照してください。