inにenable_user_defined_functions
設定して apache-cassandra-2.2.1 を実行しています。この記事に基づいて、カスタム集計を次のように定義しました。true
cassandra.yml
CREATE FUNCTION sumFunc(current double, candidate double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS 'if(current == null) return candidate; return current + candidate;'
CREATE AGGREGATE sum(double) SFUNC sumFunc STYPE double INITCOND null;
CQLSH コンソールからこれを呼び出すと、タイムアウトが表示されます。
cqlsh:test> SELECT word, sum(frequency) FROM words;
OperationTimedOut: errors={}, last_host=127.0.0.1
他のクエリを正常に実行できます。scala からクエリを実行することもできます (ただし、完全な結果セットは得られません)。
CassandraConnector(conf).withSessionDo { session =>
val result: ResultSet = session.execute("SELECT word, SUM(frequency) FROM test.words;")
while(result.isExhausted == false) {
println(result.one)
}
}