入力パーティションをフィルタリングします

出力レイヤーを作成するために、入力レイヤーのパーティションのサブセットのみを必要とするタスクがある場合があります。 このような場合は、 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 つが交差しています
  • Not2 つのバウンディングボックスのうち、基になるバウンディング ボックスの外部のパーティションのみが考慮されることを意味します

フィルタは、カタログ ID 、レイヤー ID 、パーティション名などのパーティションキーパラメータにのみ適用できます。

注 : パフォーマンス上の理由から、フィルタはパーティション メタデータまたはペイロードに基づいてフィルタリングされません。

特定のコンパイラーのフィルターを上書きします

いずれかのコンパイラーに別のパーティションフィルターを適用する必要がある場合 byId は、このメカニズムを使用して、そのフィルターをラップするエグゼキューターに別のフィルターのセットを設定できます。 これらのフィルターを上書きすると、結合されないため、既定のフィルターセット全体が置き換えられます。

例 :

// Application-wide default filter.
here.platform.data-processing.executors.partitionKeyFilters = [
  {
    className = "BoundingBoxFilter"
    param.boundingBox { north = 24.8, south = 24.68, east = 121.8, west = 121.7 }
  }
]

// Filters can be overridden for specific executors/compilers using their Executor.Id.
here.platform.data-processing.executors.byId {
  // Apply a larger bounding box filter to the input layers of this compiler to
  // include neighbor partitions.
  intermediate-compiler.partitionKeyFilters = [
    {
      className = "BoundingBoxFilter"
      param.boundingBox { north = 24.9, south = 24.58, east = 121.9, west = 121.6 }
    }
  ]
  // This compiler isn't using filtering.
  another-compiler.partitionKeyFilters = []
}

特定のレイヤーにのみフィルターを適用します

AllowListFilter 、パーティション名の固定リストに基づいてフィルタリングするために使用できます。 ブール型操作フィルターと組み合わせて AllowListFilter 使用すると、特定のレイヤーにのみ一部のフィルターを適用することもできます。

たとえば inLayer 、のにのみバウンディング ボックスを適用するには inCatalog、次のようにアプリケーションを設定します。

// Match (process) a partition key if:
here.platform.data-processing.executors.partitionKeyFilters = [
  // NOT layer in inCatalog:inLayer
  {
    className = "NotFilter"
    param.operand = {
      className = "AllowListFilter"
      param.catalogsAndLayers = {"inCatalog": ["inLayer"]}
    }
  },
  // OR (layer in inCatalog:inLayer AND partition intersects boundingBox)
  {
    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 }
      }
    ]
  }
]

パーティションキーフィルタの設定の詳細については、「ライブラリの設定」を参照してください。

」に一致する結果は 件です

    」に一致する結果はありません