述語のプッシュダウン基準

述語を含む特定の問合せを処理する場合、表API Hive統合クラスに用意されているメカニズムにより、問合せの述語が分析され、バックエンドでのフィルタ処理について次の基準を適用して述語のすべてまたは一部をデータベースにプッシュできるか、まったくプッシュできないかが判断されます。

  • 問合せの述語に含まれているコンポーネント(列、演算子、値)に、セット{=, >, >=, <, <=}の比較演算子が使用されているか、さらにAND結合、OR結合または1つ以上のINリスト(あるいはその組合せ)が使用されている場合、その述語はプッシュダウンの対象となります。
  • 有効な(表APIで定義された)主キー、索引キーまたはフィールド範囲を形成する述語コンポーネントの各組合せは、規模を最適化するメカニズムを使用する述語のプッシュダウンの対象となります。
  • 述語のプッシュダウンに適格な複数の組合せが問合せの述語に含まれていることが判明した場合は、最適なパフォーマンスと規模になる組合せがサーバーにプッシュされます。これらの組合せの複数が最適であることが判明した場合は、最初の組合せがプッシュされます。
  • プッシュする述語に含まれていない問合せの元の述語の各コンポーネントは、クライアント側のフィルタ処理のために残りの述語に追加されます。
  • すべての述語コンポーネントが述語のプッシュダウンに不適格であることが判明した場合、述語のプッシュダウンは実行されず、元の述語を使用してクライアント側のフィルタ処理のみが実行され、デフォルトのメカニズムにフォールバックされます。

前述の基準を理解することに加え、問合せの対象となる特定のOracle NoSQL Database表に主キー(および索引)を定義するときに使用する予定のデータ・モデルおよび検索パターンを理解することが重要です。述語のプッシュダウン・メカニズムは、ユーザーの介入や特別な構成なしで自動的に使用されますが、表および索引の定義方法は、実行する一般的な問合せの実行および規模に影響する可能性があります。

述語のプッシュダウンは自動的に使用され、(パフォーマンスが向上する以外に)機能していることを明確に示すものはありません。そのため、前述のようにメカニズムが実際に機能していることを確認する場合は、次のOracle NoSQL DatabaseロガーのレベルをDEBUGレベルに設定します。
  • oracle.kv.hadoop.hive.table.TableStorageHandlerBase
  • oracle.kv.hadoop.hive.table.TableHiveInputFormat

前述のロガーのレベルをDEBUGに設定した後、問合せを実行し、ロガー出力の内容を分析して述語のプッシュダウン・メカニズムが問合せの述語をどのように処理しているのかを確認できます。