user1535147
user1535147

Reputation: 1475

How do I nest a CQL map collection inside a set collection?

I am trying to have a data that will output class and teachers as below:

CLASS A: John
CLASS B: Jane
CLASS C: Stan

This is my CQLSH:

CREATE TABLE subjects(
    name TEXT,
    class_and_teachers SET<FROZEN MAP<TEXT, TEXT>>,
    );

However, I got the error

no viable alternative at input 'MAP' (...   name TEXT,  class_and_teachers SET<[FROZEN] MAP...)

Is there something wrong?

Upvotes: 1

Views: 191

Answers (1)

Adelino Silva
Adelino Silva

Reputation: 930

Try this example - put map into <> of the frozen keyword - SET<FROZEN <MAP<TEXT, TEXT>>> instead of SET<FROZEN MAP<TEXT, TEXT>>. This is required as frozen expects arguments:

CREATE TABLE subjects(
    name TEXT PRIMARY KEY,
    class_and_teachers SET<FROZEN <MAP<TEXT, TEXT>>>);

 insert into subjects (name,class_and_teachers) values ('A', {{ 'CLASS A': 'John' }});
 insert into subjects (name,class_and_teachers) values ('B', {{ 'CLASS B': 'Jane' }});
 insert into subjects (name,class_and_teachers) values ('C', {{ 'CLASS C': 'Stan' }});

select * from subjects;

 name | class_and_teachers
------+-----------------------
    C | {{'CLASS C': 'Stan'}}
    B | {{'CLASS B': 'Jane'}}
    A | {{'CLASS A': 'John'}}

Upvotes: 3

Related Questions