Можем ли мы использовать типы коллекций(Список, набор, карта) в качестве ключа кластера в Cassandra?

#list #dictionary #cassandra #set

Вопрос:

Это действительно в Кассандре? Можем ли мы использовать Набор, список, карту в качестве ключа кластера.

1)

 CREATE TABLE employee (
  id text,
  exams SET<text>,
  courses list<text>,
  results map<text, text>

  PRIMARY KEY (id, exams)
);
 
  1. СОЗДАТЬ ТАБЛИЦУ сотрудника (
    текст идентификатора,
    набор экзаменов,
    список курсов,
    карта результатов<текст, текст>

     PRIMARY KEY (id, courses)
     

    );

  2. СОЗДАТЬ ТАБЛИЦУ сотрудника ( текст идентификатора, набор экзаменов, список курсов, карта результатов<текст, текст>
     PRIMARY KEY (id, results)
     

    );

Ответ №1:

Вы можете использовать коллекции как часть первичного ключа, но они должны быть frozen коллекциями.

Эта схема недопустима:

 CREATE TABLE student_results (
    studentid text,
    results list<text>,
    PRIMARY KEY (studentid, results)
)
 

Если вы попытаетесь создать таблицу, она выдаст недопустимое исключение запроса:

 Invalid non-frozen collection type for PRIMARY KEY component
 

Правильная схема — это когда коллекция заморожена:

 CREATE TABLE student_results (
    studentid text,
    results frozen<list<text>>,
    PRIMARY KEY (studentid, results)
)
 

Ваше здоровье!