2016-05-23 2 views
1

私たちはCassandraを使用して、「ユーザーのクリック」、「ユーザーのログイン」などの分析テーブルを格納しています。データモデルは、アプリケーションが常にパーティションキーでクエリを実行するように設計されていますしかし、時には、「過去6ヶ月間に1人のユーザーあたりの平均ログイン数はどうでしたか」といったようなアドホックな分析を行う必要があります。 Spark SQLを使用しています。Spark SQLはCassandraセカンダリインデックスを使用しますか?

私の理解では、Spark SQLは基本的にCassandraのすべての行を繰り返し実行し、SQLクエリの条件を各行に適用し、一致しないものを破棄して一致するものを返します最後に必要な集約などを適用する)。私がCassandraカラム(例えば 'ログイン時間')にセカンダリインデックスを作成し、Spark SQLで「select * from logins where logintime> '2016-05-17'」というようなことをしてSQLを起動すると、セカンダリインデックスを使用してCassandraにフィルタリングするか、それともすべての行を繰り返し処理しますか?インデックス付きの述語をプッシュダウンするために、どの列にインデックスがあるかを手動で設定する必要がある設定がありますか?

答えて

4

Spark SQLは、セカンダリインデックスを使用してCassandraにフィルタリングをプッシュしますか、それともすべての行を繰り返し処理しますか?

はい

、それが利用可能な場合SparkSQLは

私は手動で列がするためにインデックスを持っていることを伝えるために設定する必要があるいくつかの設定があり、二次インデックスを使用してCQLに述語のプッシュダウンを実行します索引付けされた述語をプッシュダウンしますか?

あなたが宣言する必要が唯一のものは、アクティブ述語が

1を押し下げている)純粋SparkSQL

CREATE TEMPORARY TABLE words 
USING org.apache.spark.sql.cassandra 
OPTIONS (table "words", keyspace "test", pushdown "true") 

使用データフレーム

val df = sqlContext 
    .read 
    .format("org.apache.spark.sql.cassandra") 
    .options(Map("table" -> "words", "keyspace" -> "test", "pushdown" -> true)) 
    .load() 

2)を使用して、コネクターはメタデーダをフェッチしますtaはブートストラップでCassandraから自動的にどのインデックスをプッシュダウンに使用できるのかを把握します

+0

ああ、純粋なSparkSQLは私が逃したビットでした。おそらくこれはSparkのHiveThriftServer for SparkSQLで動作しますか? – Matt

関連する問題