2016-05-03 8 views
1

Ich versuche, ein select where mit Datasax Cassandra Connector zu tun, aber ich bin immer folgende Fehlermeldung:Funken Cassandra Steckverbinder - where-Klausel

java.io.IOException: Exception during preparation of SELECT "path" FROM "tracking"."user_page_action" WHERE token("user_id") > ? AND token("user_id") <= ? AND user_id = ? ALLOW FILTERING: user_id cannot be restricted by more than one relation if it includes an Equal 

Ich verstehe wirklich nicht, warum die connector die anderen Einschränkungen hinzuzufügen.

Dies ist, wie wir zu lesen sind versucht:

spark.cassandraTable(keySpace,table).select(column).where(whereColumn + " = ?", whereColumnValue).collect() 

und es ist wie in ihren documentation

user_id ist die primary key der Tabelle und auch habe ich versucht, die select where im Terminal cqlsh und es funktioniert.

nahm ich einen Blick auf ähnliche Fragen, aber sie waren nicht hilfreich

Dataframe where clause doesn't work when use spark cassandra connector

Spark Cassandra connector - where clause

Antwort

0

Wie Sie den Funken cassandra-Anschluss hinzugefügt Bereichsbeschränkung auf dem Token bemerkt. In der Regel wird Ihre Abfrage je nach Token-Bereich durch den Connector in mehrere Abfragen aufgeteilt, um zu erzwingen, dass jede Abfrage für ein Replikat ausgeführt wird. Dadurch wird die Datenlokalisierung sichergestellt. In Ihrem Fall stellen Sie den vollständigen Partitionsschlüssel mit user_id = value zur Verfügung (Spark ist in diesem Fall nicht das richtige Tool, aber ich weiß nicht, was Ihre Anwendung macht). Es gab eine Diskussion über das Spark-Cassandra-Connector-Projekt, um das zu beheben, ich weiß nicht, ob es passiert ist.

Wenn Sie jedoch zu Cassandra 2.2 oder 3 wechseln (ich gehe davon aus, dass Sie Cassandra 2.1 ausführen), akzeptiert Cassandra die generierte Abfrage (die Partition, in der der Partitionsschlüssel sowohl durch Gleichheit als auch Bereich eingeschränkt ist). Ich habe es auf 2.2.6 und 3.0.5 getestet.

Verwandte Themen