CREATE TYPE

This page documents the preview version (v2.21). Preview includes features under active development and is for development and testing only. For production, use the stable version (v2024.1). To learn more, see Versioning.

Synopsis

Use the CREATE TYPE statement to create a new user-defined data type in a keyspace. It defines the name of the user-defined type and the names and data types for its fields.

Syntax

Diagram

CREATETYPEIFNOTEXISTStype_name(,field_namefield_type)

Grammar

create_type ::= CREATE TYPE [ IF NOT EXISTS ] type_name
                    (field_name field_type [ ',' field_name field_type ...]);

Where

  • type_name and field_name are identifiers (type_name may be qualified with a keyspace name).
  • field_type is a data type.

Semantics

  • An error is raised if the specified type_name already exists in the associated keyspace unless the IF NOT EXISTS option is used.
  • Each field_name must each be unique (a type cannot have two fields of the same name).
  • Each field_type must be either a non-parametric type or a frozen type.

Examples

Collection types must be frozen to be used inside a user-defined type.

ycqlsh:example> CREATE TYPE person(first_name TEXT, last_name TEXT, emails FROZEN<LIST<TEXT>>);
ycqlsh:example> DESCRIBE TYPE person;
CREATE TYPE example.person (
    first_name text,
    last_name text,
    emails frozen<list<text>>
);
ycqlsh:example> CREATE TABLE employees(employee_id INT PRIMARY KEY, employee person);
ycqlsh:example> INSERT INTO employees(employee_id, employee)
                   VALUES (1, {first_name : 'John', last_name : 'Doe', emails : ['jdoe@example.com']});
ycqlsh:example> SELECT * FROM employees;
 employee_id | employee
-------------+---------------------------------------------------------------------------
           1 | {first_name: 'John', last_name: 'Doe', emails: ['john.doe@yugabyte.com']}

See also