Cassandra Secondary Index 사용방법, Cassandra 0.7.0 에서는 name 을 바로 Column 명으로 사용하지 못합니다.

Cassandra 에서 Secondary Index 를 사용하기 위해서 테스트를 하다가 좀 삽질을 하게
되었습니다.

현재 https://issues.apache.org/jira/browse/CASSANDRA-1995 에 등록되어 있고
0.7.1 에서는 Fix 된 문제라고 합니다. 문제는 간단하게

$ bin/cassandra-cli –host localhost
Connected to: “Test Cluster” on localhost/9160
Welcome to cassandra CLI.

Type ‘help;’ or ‘?’ for help. Type ‘quit;’ or ‘exit;’ to quit.
[default@unknown] create keyspace demo;
[default@unknown] use demo;
[default@demo] create column family users with comparator=UTF8Type
… and column_metadata=[{column_name: full_name, validation_class: UTF8Type},
… {column_name: birth_date, validation_class: LongType, index_type: KEYS}];

[default@demo] set users[bsanderson][full_name] = ‘Brandon Sanderson’;
[default@demo] set users[bsanderson][birth_date] = 1975;
[default@demo] set users[prothfuss][full_name] = ‘Patrick Rothfuss’;
[default@demo] set users[prothfuss][birth_date] = 1973;
[default@demo] set users[htayler][full_name] = ‘Howard Tayler’;
[default@demo] set users[htayler][birth_date] = 1968;

[default@demo] get users where birth_date = 1973;

위와 같은 형태로 Column Family 가 생성이 가능합니다. birth_data 가 Seconday Index 로 설정이
되었습니다.

LongType 말고 UTF8Type 도 같은 방식으로 생성이 가능합니다.

[default@demo] update column family users with comparator=UTF8Type
… and column_metadata=[{column_name: full_name, validation_class: UTF8Type},
… {column_name: birth_date, validation_class: LongType, index_type: KEYS},
… {column_name: state, validation_class: UTF8Type, index_type: KEYS}];

[default@demo] get users where state = ‘UT’;

그런데 위에 column_name 을 name 으로만 지정하면 제대로 동작하지 않습니다.
이는 show cluster name 이라는 keyword 를 파싱하기 위한 동작의 side-effect 라고 합니다.

그러면 꼭 name 을 사용하지 못하는가? 는 아닙니다.

get Users[‘charsyam’];
get Users[charsyam];

이 동일하게 동작하는 것 처럼 name 대신에 ‘name’으로 지정해주면 문제는 해결됩니다.
단, 사용할 때도 이때는 꼭 get Users[‘charsyam’][‘name’] 형태로 이용해야 합니다.