2016-10-29 2 views
1

나는 카산드라 새로운 그리고 난 기본 키카산드라 선택 쿼리에서 제

cqlsh> create table rick_morty (id uuid, name text, adventure text, instigator frozen<set<text>>, PRIMARY KEY((instigator), adventure, name, id));  

이제 내가 원하는 같은 냉동 컬렉션 테이블을 생성는 (기본 키를 기반으로 쿼리하는 경우 선동자)에 대한 정보를 수집합니다. 나는 단지 하나의 값을 쿼리하고 싶다면 CONTAINS 'contained_value'를 사용할 수 있지만 전체 컬렉션을 쿼리하려고한다.

나는이 작업을 수행하는 방법을 찾아 다녔지만 그 답을 찾을 수 없습니다.

const query = 'SELECT name from rick_morty where instigator = ["Rick", "Morty", "Beth"]'; 

이 선동자의 배열과 관련된 모든 이름 목록을 검색하려면 ...

const query = 'SELECT name from rick_morty'; 

같은 일을

는 모든 결과를 검색하지만, 내가 좋아하는 일을하고 싶습니다.

가능합니까 ?? 부적절한 방식으로 테이블을 만들었나요?

답변

0

이가 가능합니까 ??

예. #8 here을 참조하십시오.

"사용자 정의 형식의 열에 대한 데이터 필터링 인덱스를 만든 다음 조건부 쿼리를 실행합니다 .Cassandra 2.1.x에서는 WHERE 절에 name 열의 모든 구성 요소를 나열해야합니다." ,

SELECT name from rick_morty where instigator = { 'Rick', 'Morty', 'Beth'}; 
+1

와우, 나는 바보 같은 느낌! 나는 많은 문서를 읽었지만, "User Defined Type"을 보았을 때, 'nah, 나는 콜렉션 타입이 이미 설정되어 있고, 어떻게 할 지 알 필요가 없다'고 생각했습니다. 바! 답변에 대해 정말 고마워요. D 나는 그것을 수락 된 것으로 표시했으며, 친절하게 도와 주셔서 감사합니다. –

0

다음 쿼리가 작동합니다

SELECT name from rick_morty where instigator contains 'Rick' AND contains 'Morty'; 

을하지만,이 설정을 저장하는 데 사용되는 의미로 구현하는 효율적인/적절한 방법이 될 수 없습니다 :

이 작업을해야합니다/주어진 기본 키에 대한 데이터 집합을 가져옵니다. 그래서이 요구 사항이 주요 유스 케이스 중 하나 인 경우 쿼리를 추가 테이블로 분석하여 데이터 모델을 다시 디자인하는 것이 좋습니다.

+0

아마 당신이이 테이블을 다시 할 필요가 있다고 생각 하겠지만 원래 질문에 가장 가깝기 때문에 다른 대답을 받아 들였습니다. 도와 줘서 고마워! 이 물건에 대한 다른 사람들의 의견을 듣는 것은 나에게 정말로 도움이된다. –