2016-05-23 1 views
1

Wir verwenden Cassandra, um eine Reihe von Analysetabellen zu speichern, zB "Benutzerklicks", "Benutzeranmeldungen" usw. Unser Datenmodell ist so konzipiert, dass unsere Anwendung immer nach dem Partitionsschlüssel fragt, zB Logins für Benutzer holen id "usw. Manchmal müssen wir jedoch eine Ad-hoc-Analyse durchführen, wie" Wie hoch war die durchschnittliche Anzahl der Logins pro Benutzer pro Monat in den letzten 6 Monaten? " und dafür verwenden wir Spark SQL.Verwendet Spark SQL Cassandra Sekundärindizes?

Meine Frage ist: Ich verstehe, dass Spark SQL im Grunde über jede Zeile in Cassandra iterieren und die Bedingungen der SQL-Abfrage auf jede Zeile anwenden wird, diejenigen, die nicht übereinstimmen und diejenigen, die übereinstimmen (und schließlich Anwendung einer Aggregation usw. erforderlich). Wenn ich einen sekundären Index für eine Cassandra-Spalte erstelle (zum Beispiel "Login-Zeit"), und dann in Spark SQL mache ich etwas wie "Wählen Sie * aus Logins, wo logintime> '2016-05-17'" Spark SQL schieben die mit dem sekundären Index nach Cassandra filtern, oder wird es immer noch durch jede Zeile iterieren? Gibt es eine Konfiguration, die ich manuell festlegen muss, welche Spalten Indizes haben, um die indizierten Prädikate nach unten zu drücken?

Antwort

4

wird Spark SQL die Filterung mit dem sekundären Index nach Cassandra verschieben, oder wird es immer noch durch jede Zeile iterieren?

Ja, SparkSQL wird Prädikat-Pushdown CQL mit Sekundärindex führen, wenn es

Gibt es eine Config ich es manuell einstellen müssen verfügbar ist mitzuteilen, welche Spalten Indizes haben, um die indizierten Prädikate nach unten drücken?

Das einzige, was Sie ist activate Prädikat nach unten drücken

1) Mit Datenrahmen

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

2) Verwendung von reinem SparkSQL

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

Die erklären müssen Connector holt die Metada ta aus Cassandra bei Bootstrap und werde automatisch herausfinden, welche Indizes für Pushdown verwendet werden können

+0

Ah, die pure SparkSQL war das Bit, das ich vermisste - erstaunlich, danke! Vermutlich wird dies mit Sparks HiveThriftServer für SparkSQL funktionieren? – Matt