2013-06-18 3 views
1

hector api를 사용하여 복합 열을 읽는 동안 문제가 발생합니다. 구성 요소 0의 값을 읽는 데 필요한 바이트가 부족합니다. - Hector Composite 열 Read

내 열 가족 :

create column family step_wise_stats_cc with key_validation_class = 'CompositeType(UTF8Type, UTF8Type)' and comparator = UTF8Type and default_validation_class = UTF8Type; 

데이터 : 행 키 : {TYPE-1, SUB-TYPE-1}
열 : 이름 1 : 값 1

내가 이런 식으로 질의하고 있습니다 :

Cluster cluster = HFactory.getOrCreateCluster("cls1", "localhost:9160");; 
Keyspace keyspace = HFactory.createKeyspace("ks1",cluster);; 
Serializer se = StringSerializer.get(); 

Composite start = new Composite(); 
start.addComponent(0, "TYPE-1", ComponentEquality.EQUAL); 
start.addComponent(1, "SUB-TYPE-1", ComponentEquality.EQUAL); 
Composite end = new Composite(); 
end.addComponent(0, "TYPE-1", ComponentEquality.GREATER_THAN_EQUAL); 
start.addComponent(1, "SUB-TYPE-1", ComponentEquality.GREATER_THAN_EQUAL); 

SliceQuery<String, Composite, String> sliceQuery = HFactory.createSliceQuery(keyspace, se, CompositeSerializer.get(), se);; 
sliceQuery.setColumnFamily("cf1"); 
sliceQuery.setKey("TYPE-1"); 
sliceQuery.setRange(start, start, false, 999); 

QueryResult<ColumnSlice<Composite, String>> qr = sliceQuery.execute(); 

그러나 예외 아래 점점 : me.prettyprint.hector.api.exceptions.HInvalidRequestException을 : INVA lidRequestExc eption (이유 : 구성 요소 0의 값을 읽는 데 바이트가 충분하지 않음)

어떤 도움이 필요합니까?

답변

0

행 키가 CompositeType이지만 행 키를 "TYPE-1"로 설정하고 있습니다. 이것이 카산드라가 당신에게 오류를주는 이유입니다.

슬라이스 쿼리는 주어진 행에 대해 열 범위를 반환합니다. 행 키에 대한 복합을 지정하거나 하위 유형을 열로 이동하여 데이터 모델을 변경하고 열을 복합으로 만들어야합니다.

+0

나는 여기에서 컴포지트 행 키 Vs 복합 열을 통해 혼란스러워합니다. 이것들에 좋은 링크를 제공 할 수 있습니까? –

+0

가장 큰 차이점은 열이 아니라 행이 아닌 범위 쿼리를 수행 할 수 있다는 것입니다. 따라서 모든 쿼리는 합성 여부와 상관없이 전체 행 키를 알고 있어야하지만 정확한 열을 지정할 필요는 없습니다. – Richard

+0

리차드 한 가지 더 질문에 감사드립니다. 제 경우에는 약 100 개의 키가 있습니다 (또는 TYPE이라고 말하면됩니다). 각각의 하위 유형에는 수만 가지의 하위 유형이있을 수 있습니다. 각 하위 유형에는 5 ~ 6 개의 열이 있습니다. 컬럼 가족을 어떻게 모델링해야합니까? 미리 감사드립니다 .. –