내가 같은 테이블이 있다고 가정하자 :SparkSQL - 컬렉션 (설정)에 CassandraSqlContext 쿼리
CREATE TABLE USER (
userid ascii,
books set<text>
PRIMARY KEY (userid)
);
및 지수 :
create index on USER (books);
나는 SQL 컨텍스트를 사용하여 책을 조회 할. 내가 뭐하는 거지 것은 :
CassandraSQLContext cassandraContext = new CassandraSQLContext(sparkContext);
SchemaRDD userTable = cassandraContext.sql("SELECT * FROM keyspace.user");
userTable.registerTempTable("usertable");
다음 쿼리는 카산드라에 대한 하지 작업을 수행합니다
그것은 단지 'BOOK1'을 사용자에게 반환SchemaRDD userTable = cassandraContext.sql("SELECT * FROM keyspace.user where books CONTAINS 'book1' and books CONTAINS 'book2'");
. books CONTAINS ('book1', 'book2')
과 비슷한 쿼리를 시도했지만 그 중 아무 것도 작동하지 않았습니다.
은 내가 등록 테이블에 할 수있는 것은 :
SchemaRDD users = cassandraContext.sql("SELECT * FROM usertable where books IN ('book1', 'book2')");
또는 유사한 쿼리 :
SchemaRDD users = cassandraContext.sql("SELECT * FROM usertable where userid='some_user_id'");
내가하고 싶은 것은 같은 책에 의해 쿼리입니다.
하지만 작동하지 않습니다. 0 개의 레코드를 반환합니다. 나는 user_books_idx
이라는 이름의 인덱스 테이블을 등록하려고 시도했으나 어느 것도 작동하지 않았습니다. 인덱싱 된 콜렉션에서 쿼리 할 수 있습니까? 내가 어떻게 해?
그게 내가 지금하고있는 일이지만 그 종류의 천천히. 나는 그것의 가능한 cql 알고 있지만 일부 조인 절을 SQL 컨텍스트에서 할 기대했다. –
안녕하세요 @ MustafaGenç .. 나는 비슷한 문제가 ..이 CassandraRow .. 대신 JOINs schemaRDD 임시 테이블을 사용하여 GenericRow 얻을. – monal86