2013-02-20 3 views
0

좋아, 나는 여기서 변하고있다. 카산드라와 함께 설명 할 수없는 행동이 많습니다. 나는 그들이 카본 드라와 관련이 있는지 없는지조차 확신하지 못합니다. (안 내게로)카산드라 필드 문자열 대 long

create column family cachekey 
    with comparator = UTF8Type 
    and column_metadata = 
    [ 
    { 
     column_name : accountNumber, 
     validation_class : UTF8Type 
    }, 
    { 
     column_name : homeId, 
     validation_class : LongType 
    } 
... 
]; 

일부 레코드가 테이블에 추가하고 다음과 같이

나는 (간결성을 위해 모든 열을 표시하지 않음) 테이블을 만들었습니다. 내가 스키마를 표시 할 때 지금, 나는 정말 저를 당혹 내가 지금
[[email protected]] show schema; 
... 

use cachekeydata; 

create column family cachekey 
    with column_type = 'Standard' 
    and comparator = 'UTF8Type' 
    and default_validation_class = 'BytesType' 
    and key_validation_class = 'BytesType' 
    and read_repair_chance = 0.1 
    and dclocal_read_repair_chance = 0.0 
    and gc_grace = 864000 
    and min_compaction_threshold = 4 
    and max_compaction_threshold = 32 
    and replicate_on_write = true 
    and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' 
    and caching = 'KEYS_ONLY' 
    and compression_options = {'sstable_compression' : 'org.apache.cassandra.io.compress.SnappyCompressor'}; 

를 만든 열을 볼 수없는 이유는 확실하지 않다 : 내 자바 코드에서 데이터를 가져 오는 경우, 내가 널을 얻을 기록의 일부 문자열을 검색 할 때 긴 검색을 시도하지만 포인터 예외 : NullPointerException이 다음

Mac=001DD67CFF46 
    cidx=<50190074> 
    cidx=<3832617404583655220> 
    cidx=<3832617404583655220> 
Mac=001DCFE2122C 
    cidx=<3663580> 

:

System.out.println("Mac=" + mac); 
System.out.println(" cidx=<" + result.getStringValue("homeId",null) + ">"); 
System.out.println(" cidx=<" + result.getLongValue("homeId",null) + ">"); 
System.out.println(" cidx=<" + result.getColumnByName("homeId").getLongValue() + ">"); 

가 이어집니다. ,

LongSerializer.get().fromBytes(column.getValue()); 

마지막 : 즉, result.getStringValue (널 (null) "homeId은")이 카산드라 라이브러리 코드 내부에 다음 줄을 실행할 때 3,663,580이 있지만 result.getLongValue는 ("homeId", 널 (null))는 NullPointerException이 발생 반환 CLI를 콘솔에서 위와 같이이 같은 두 개의 레코드를 표시하는 것은 나에게 의심스러운 아무것도 표시되지 않습니다 :

[[email protected]] get cachekey[utf8('001DD67CFF46')]; 
=> (column=accountNumber, value=30373833373132303730323036, timestamp=1361305382124) 
=> (column=corp, value=3037383337, timestamp=1361305382124) 
=> (column=homeId, value=3530313930303734, timestamp=1361305382124) 
=> (column=zip, value=3130343732, timestamp=1361305382124) 
Returned 4 results. 
Elapsed time: 70 msec(s). 
[[email protected]] get cachekey[utf8('001DCFE2122C')]; 
=> (column=accountNumber, value=30373830383132333437323032, timestamp=1361305376659) 
=> (column=corp, value=3037383038, timestamp=1361305376659) 
=> (column=homeId, value=33363633353830, timestamp=1361305376659) 
=> (column=zip, value=3036393033, timestamp=1361305376659) 
Returned 4 results. 
Elapsed time: 45 msec(s). 

내 질문 :

  • Q1을. 큰 질문입니다. 위 예제에서 널 포인터를 얻는 이유는 무엇입니까?
  • Q2. 더 작은 것들 :
    • Q2a. 내가 1에서 테이블을 어떻게 설정했는지에 따라 3 정상에서 관찰 한 것입니까?
    • Q2b. 왜 내 문자열과 긴 값이 일치하지 않습니까?
+0

'homeId'에 쓰여진 값이 길어도 괜찮습니까? –

+0

테이블을 만들 때 validation_class를 LongType으로 설정했다고 확신합니다. 내가 어떻게 테이블을 채웠는지 모르겠다. 그리고 그것은 본질적으로 나의 질문이다. 내가 테이블을 어떻게 생성했는지, 위에서 설명한 행동을 일으키기 위해 테이블에 데이터를 입력하는 방법은 무엇인가? – Lolo

답변

0

대답은 사람에게 도움이 될 것입니다 확실하지만, 긴 것으로 예상 된 데이터는 문자열로 삽입 아닙니까. 데이터가 이러한 원인

  • 를 (I은 오라클의 세계에서 오는에 사용되지 않은 것을) 문자열 또는 긴과 같이되었는지 여부를 다른 결과를 표시

    • : 이것은 분명히 내가 위의 설명 적어도 두 가지 문제가 발생 비정기 널 포인터 예외
  • +0

    CQL은 바이트 버퍼 기반 Thrift API보다 더 나은 유형 안전성을 제공합니다. 첫 번째 순수 CQL java 드라이버는 https://github.com/datastax/java-driver입니다. – jbellis