Tuple data type is a fixed-length sets of typed positional fields. Use a tuple as an alternative to user-defined type(UDT). A Tuple can accommodate many fields(32768). When we create a table, for tuple datatype use angle brackets and a comma delimeter for the commponent types. Unlike other “composed” types (collections and UDT), a tuple is always frozen (without the need of the frozen keyword) and it is not possible to update only some elements of a tuple (without updating the whole tuple). Also, a tuple literal should always have the same number of value than declared in the type it is a tuple of (some of those values can be null but they need to be explicitly declared as so).
Example
Creating table student with tuple data type
1 2 3 4 5 6 |
CREATE TABLE student ( id UUID PRIMARY KEY, student_name text, student_address tuple<text,int,text> // address,zip code, telephone home ); |
the output
1 2 3 4 5 6 7 8 9 10 11 12 |
cassandra@cqlsh:putracode> CREATE TABLE student ( ... id UUID PRIMARY KEY, ... student_name text, ... student_address tuple<text,int,text> // address,zip code, telephone home ... ); cassandra@cqlsh:putracode> desc student CREATE TABLE putracode.student ( id uuid PRIMARY KEY, student_address frozen<tuple<text, int, text>>, student_name text ) |
Inserting Data for tuple
value
1 2 3 |
INSERT INTO student(id,student_name,student_address) VALUES(UUID(),'gita',('GATOT SUBROTO',80237,'0361-123123123')); |
Result
1 2 3 4 5 6 7 8 |
cassandra@cqlsh:putracode> INSERT INTO student(id,student_name,student_address) ... VALUES(UUID(),'gita',('GATOT SUBROTO',80237,'0361-123123123')); cassandra@cqlsh:putracode> SELECT * FROM student; id | student_address | student_name ------------+--------------------------------------------+-------------- ad582a49...| ('GATOT SUBROTO', 80237, '0361-123123123') | gita (1 rows) |
Filtering using tuple value
when we filtering use tuple data type use keyword ALLOW FILTERING
or creating index on column tuple.
example
1 2 3 4 5 6 7 8 9 |
cassandra@cqlsh:putracode> select * from student where student_address=('GATOT SUBROTO', 80237, '0361-123123123') ALLOW FILTERING; id | student_address | student_name ----------------+--------------------------------------------+-------------- ad582a49-238c..| ('GATOT SUBROTO', 80237, '0361-123123123') | gita (1 rows) |
Tuple support nested tuple
1 2 3 4 5 6 7 8 |
CREATE TABLE student ( id UUID PRIMARY KEY, student_name text, student_address tuple<text,int,text,tuple<text,text>> // address,zip code, telephone home,<country,city> ); INSERT INTO student(id,student_name,student_address) VALUES(UUID(),'gita',('GATOT SUBROTO',80237,'0361-123123123',('Indonesia','Denpasar'))); |
Update Data on Tuple
1 2 3 4 |
UPDATE student SET student_address=('GATOT SUBROTO 182',80237,'0361-123123',('Indonesia','Denpasar')) WHERE id=9b1a7dec-6fed-425b-9d73-019cffbe5220; |
a tuple is always frozen (without the need of the frozen keyword) and it is not possible to update only some elements of a tuple (without updating the whole tuple).