Spark SQLで検索インデックスに述語プッシュ・ダウンを使用する

検索述語プッシュ・ダウンを使用すると、SearchAnalyticsデータ・センターのクエリーでSpark SQLクエリーのSolrインデックス・カラムを使用できます。

検索述語プッシュ・ダウンを使用すると、SearchAnalyticsデータ・センターのクエリーでSpark SQLクエリーのSolrインデックス・カラムを使用できます。検索述語プッシュ・ダウンを有効にするには、spark.sql.dse.search.enableOptimizationプロパティをonまたはautoに設定します。デフォルトでは、spark.sql.dse.search.enableOptimizationautoに設定されています。

自動モードでは、述語フィルターの適用の有無にかかわらず、述語プッシュ・ダウンを使用すると、検索インデックスに対してCOUNT操作が実行されます。検索フィルター適用時のレコード数が以下の数式の結果未満の場合:

spark.sql.dse.search.autoRatio * the total number of records

自動的に最適化が実行されます。

プロパティspark.sql.dse.search.autoRatioはユーザーが構成可能です。デフォルト値は0.03です。

DSE Searchのパフォーマンスは、クエリーで返されるレコード数に直接関係します。データセットの大部分を必要とする要求では、述語プッシュ・ダウンを使用せずにフル・テーブル・スキャンを実行した方が良い場合もあります。

ScalaデータセットでSolr述語プッシュ・ダウンを有効にするには、以下のように入力します。

val solrEnabledDataSet = spark.read
    .format("org.apache.spark.sql.cassandra")
    .options(Map( 
        "keyspace" -> "ks", 
        "table" -> "tab", 
        "spark.sql.dse.search.enableOptimization" -> "on")
    .load()

Solr述語プッシュ・ダウンが有効なSpark SQLで一時的なテーブルを作成するには、以下のように入力します。

CREATE TEMPORARY TABLE temp USING org.apache.spark.sql.cassandra OPTIONS (
table "tab",
keyspace "ks",
spark.sql.dse.search.enableOptimization "on");

サーバー構成ファイルspark.sql.dse.search.enableOptimizationプロパティを追加して、このプロパティをグローバルに設定します。

プッシュ・ダウン・レベルでオプティマイザーが動作し、ソースにプッシュされる述語のみが最適化されます。CassandraSourceRelationにプッシュされる述語の内容を正確に確認するには、explainコマンドを使用します。

val query = spark.sql("query")
query.explain

最適化計画をログに記録する

述語プッシュ・ダウンを使用するクエリーの最適化計画をログに記録するには、Sparkロギング構成ファイルorg.apache.spark.sql.SolrPredicateRulesロガーをDEBUGに設定します。

<logger name="org.apache.spark.sql.SolrPredicateRules" level="DEBUG"/>