2013-07-11 3 views
0

난 내가 내가 CLI는 내가 그것을 할 수 없습니다 오전 명령을 만들 필요가카산드라 복합 열 가족

CREATE TABLE event_tracking (
    key text, 
    trackingid timeuuid, 
    entityId bigint, 
    entityType text 
    userid bigint 
    PRIMARY KEY (key, trackingid) 
) 

을 만들려면 SQL 세계에서 간단한 요구 사항을 가지고있다. 나는 돼지가 열 가족은 내가 노력하고 didnt가 그것으로 값 열을 추가하는 이유

create column family event_tracking 
... WITH comparator='CompositeType(TimeUUIDType)' 
... AND key_validation_class=UTF8Type 
... AND default_validation_class = UTF8Type; 

1) 내가 그나마 알고

근무 무엇 cqlsh (대만족) 여기

를 통해 생성 읽을 수있는 CLI를 통해 기둥 패밀리를 작성해야 그것을 내가 cqlsh에서 볼 때

CREATE TABLE event_tracking (
    key text, 
    trackingid timeuuid, 
    value text, 
    PRIMARY KEY (key, trackingid) 
) WITH COMPACT STORAGE AND 
    bloom_filter_fp_chance=0.010000 AND 
    caching='KEYS_ONLY' AND 
    comment='' AND 
    dclocal_read_repair_chance=0.000000 AND 
    gc_grace_seconds=864000 AND 
    read_repair_chance=0.100000 AND 
    replicate_on_write='true' AND 
    populate_io_cache_on_flush='false' AND 
    compaction={'class': 'SizeTieredCompactionStrategy'} AND 
    compression={'sstable_compression': 'SnappyCompressor'}; 

2) 나는 행을 삽입하기 위해 asynatax를 사용하고있다.

OperationResult<CqlResult<Integer, String>> result = keyspace.prepareQuery(CQL3_CF) 
    .withCql("INSERT INTO event_tracking (key, column1, value) VALUES ("+System.currentTimeMillis()+","+TimeUUIDUtils.getTimeUUID(System.currentTimeMillis())+",'23232323');").execute(); 

하지만 최대한 빨리 동적 열을 추가하려고,

3) 내가하려고하면 내가 cql3을 통해 동적 열을 추가 할 수 없습니다처럼

OperationResult<CqlResult<Integer, String>> result = keyspace.prepareQuery(CQL3_CF) 
.withCql("INSERT INTO event_tracking (key, column1, value, userId, event) VALUES ("+System.currentTimeMillis()+","+TimeUUIDUtils.getTimeUUID(System.currentTimeMillis())+",'23232323', 123455, 'view');").execute(); 

보이는 인식 할 수 없습니다 cql3을 통해 새 열을 추가

alter table event_tracking add eventid bigint; 

그것은 나에게

,691,363을 제공합니다210
Bad Request: Cannot add new column to a compact CF 

답변

1

0) 테이블을 만들려면 COMPACT STORAGE 돼지는 CQL3에서 만든 경우에도 볼 수 있어야합니다. 그러나 기본 키에 entityIdentityType을 넣어야합니다 (압축 저장은 기본적으로 기본 키의 첫 번째 열이 행 키가되고 다음이 열 키로 사용되는 복합 유형이된다는 것을 의미합니다. 값이 될 열이 하나 더있는 경우에만 공간이 있습니다). 당신이 테이블을 항상 value있을 것 옛날 방식을 만들

1), 그것은 열 값, 그리고 CQL3에 value라는 로 표현된다. 이것은 CQL3이 기본 저장소 모델을 테이블에 매핑하는 방법입니다.

2) 열이 CompositeType(TimeUUIDType) 인 테이블을 만들었으므로 TimeUUID 열만 추가 할 수 있습니다. 문자열을 TimeUUID 열 키로 저장하도록 C *에게 알릴 수 없습니다. 다시 0 사용이 테이블을 반복

3) :

CREATE TABLE event_tracking (
    key text, 
    trackingid timeuuid, 
    entityId bigint, 
    entityType text, 
    userid bigint, 
    PRIMARY KEY (key, trackingid, entityId, entityType) 
) WITH COMPACT STORAGE 

이 하나 것만 BTW, 당신의 일관성 총액이야 (각 userid에 대해 하나의 trackingId/entityId/entityType 조합이있을 수 있다고 가정)? . 전체 동적 열 경로를 이동해야하는 경우는 아니지만 entityIdentityType에 대해 다른 데이터 유형을 사용할 수는 없습니다 (하지만 CQL3 이전의 경우도 마찬가지 임).이 질문에서 예제를 확인하십시오. 동적 열 수행 : Inserting arbitrary columns in Cassandra using CQL3

+0

감사합니다. 나의 의도는 long (System.getCurrentMilliSeconds()) 키로 컬럼을 생성하고 id를 uuid로 추적하여이를 합성 키로 만든 다음 entityid, entitytype, userid 및 event를 동적 컬럼으로 추가하는 것이다.동시 요청을 동시에 받았더라도 같은 행에 이벤트를 기록 할 수 있습니다. 나는 어떤 의미가 있기를 바랍니다. – plzdontkillme

+0

CREATE TABLE event_tracking을 만들 수 있습니까 ( 키 텍스트, ). trackingid timeuuid – plzdontkillme

관련 문제