Overview of User Defined Type (UDT) in Cassandra

User Defined Data Type:
One of the advantages of User Defined Data(UDT) is to Attach multiple data fields to a column.In Cassandra, UDTs play a vital role which allow group related fields (such that field 1, field 2 etc.) can be of data together and are named and type.

In Cassandra one of the advantage of UDTs which helps adding flexibility to your table and data model. we can construct UDT provided by Cassandra: UDT, which stands for User-Defined Type. As we can show in example that User-defined types (UDTs) can attach multiple data fields in which each named and typed can be mapped to a single column.

To construct User Defined Type (UDT) any valid data type can be used for fields type in Cassandra, including collection ( SET, LIST, MAP) or any other UDTs. Once a UDT in Cassandra is created then it can be used to define a column in a main table.



Syntax to define UDT:
CREATE TYPE UDT_name 
(
  field_name 1 Data_Type 1,
  field_name 2 Data_Type 2,
  field_name 3 Data_Type 3,
  field_name 4 Data_Type 4,
  field_name 5 Data Type 5,
);

Simple steps to create UDTs:

Step-1: Create a KEYSPACE, If not existed. Syntax:

create_keyspace_statement ::=  
      CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name 
       WITH options 

Step-2: To create keyspace used the following CQL query.

CREATE KEYSPACE Emp
    WITH replication = {'class': 'SimpleStrategy', 
                        'replication_factor' : 1};  

To check keyspace Schema used the following CQl query.

DESCRIBE KEYSPACE Emp;

Step-3: To Create Employee User Data Type for Current address used the following CQL query. For example, User Data Type for Current address

CREATE TYPE Emp.Current_add
(
Emp_id int PRIMARY KEY,
h_no text,
city text,
state text,
pin_code int,
country text 
); 

Here Current_add is a Cassandra user defined data type.




Figure – User-defined types (UDTs)


Step-4: Create table Registration that is having current_address UDT as one of the column, for example:

CREATE TABLE Emp.Registration
( Emp_id int PRIMARY KEY, Emp_Name text, current_address FROZEN<>); 

Step-5: To insert data using UDT in Cassandra used the following CQL query.

Format-1: using JSON (JavaScript Object Notation) format.
In Cassandra we can also insert data in JSON (JavaScript Object Notation) format. For example: CQL query by using JSON format.



INSERT INTO Emp.Registration JSON'
                        {"Emp_id":2000, " Current_add" : 
                            { “h_no” : “A 210”, “city” : 
                                      “delhi”, “state” : 
                     “DL”, pin_code :201307, ”country” :”india”});, 
"Emp_Name":"Ashish Rana"}' 


Format-2: simple insertion

INSERT INTO Emp.Registration (Emp_id, Emp_Name, current_address ) 
            values (‘1000’, ‘Ashish’, { h_no : ‘A 210’, city 
                                    : ‘delhi’, state : ‘DL’, pin_code 
                                    :12345, country :’IN’});

INSERT INTO Emp.Registration(Emp_id, Emp_Name, current_address ) 
            values (‘1001’, ‘kartikey Rana’, { h_no : ‘B 210 ’,  city 
                                    : ‘mumbai’, state : ‘MH’, pin_code 
                                    :12345, country :’IN’});

INSERT INTO Emp.Registration(Emp_id, Emp_Name, current_address ) 
            values (‘1002’, ‘Dhruv Gupta’, { h_no : ‘C 210’, city 
                                    : ‘delhi’, state : ‘DL’, pin_code 
                                    :12345, country :’IN’}); 

Output:




Figure – UDT Table-insertion


In this case we will see how to insert command without insert the value of one or more field.
For example, we are not passing the value of field here. How Cassandra will handle this?
Well, it will insert this value as a normal value but it will take the field value as null. Every field value, except the primary key that we do not pass at the time of insertion, Cassandra will take it as null.

CQL query without insert one field or more field value of the UDT:

INSERT INTO Emp.Registration(Emp_id, Emp_Name, current_address ) 
                 values (‘1003’, ‘Amit Gupta’, { h_no : ‘D 210’,  city 
                               : ‘Bangalore’, state : ‘MH’, pin_code :12345});

INSERT INTO Emp.Registration(Emp_id, Emp_Name, current_address ) 
                 values (‘1004’, ‘Shivang Rana’, { h_no : ‘E 210’, city 
                               : ‘Hyderabad’, state : ‘HYD’}); 

Output:




Figure – UDT table without insert one or more field value




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.