CREATE TYPE
Creates a custom data type in the keyspace that contains one or more fields of related information, such as address (street, city, state, and postal code).
The scope of a user-defined type (UDT) is keyspace-wide.
|
UDTs cannot contain counter fields. |
Syntax
CREATE TYPE [ IF NOT EXISTS ] [<keyspace_name>].<type_name>
(<field_name> <cql_datatype> [ , <field_name> <cql_datatype> ... ]) ;
| Syntax conventions | Description |
|---|---|
UPPERCASE |
Literal keyword. |
Lowercase |
Not literal. |
|
Variable value. Replace with a user-defined value. |
|
Optional.
Square brackets ( |
|
Group.
Parentheses ( |
|
Or.
A vertical bar ( |
|
Repeatable.
An ellipsis ( |
|
Single quotation ( |
|
Map collection.
Braces ( |
|
Set, list, map, or tuple.
Angle brackets ( |
|
End CQL statement.
A semicolon ( |
|
Separate the command line options from the command arguments with two hyphens ( |
|
Search CQL only: Single quotation marks ( |
|
Search CQL only: Identify the entity and literal value to overwrite the XML element in the schema and solrConfig files. |
Parameters
| Parameter | Description | Default |
|---|---|---|
|
Optional. Name of the keyspace that contains the table to index. |
If no name is specified, the current keyspace is used. |
|
Unique name for the type. CQL types are reserved for a list. See type names. |
|
|
Define fields that are in the UDT in a comma-separated list with |
|
|
Valid CQL data type. |
Usage notes
Once created, UDTs can be used either in a frozen or non-frozen state. In a frozen state, the UDT is stored as a single value, and cannot be altered or updated except as a whole. In a non-frozen state, the UDT is stored as a collection of fields, and can be updated individually.
Examples
- Simple example
-
This example creates a user-defined type
cycling.basic_infothat consists of personal data about an individual cyclist.CREATE TYPE IF NOT EXISTS cycling.basic_info ( birthday timestamp, nationality text, height text, weight text );After defining the UDT, you can create a table that has columns with the UDT. CQL collection columns and other columns support the use of user-defined types, as shown in Inserting UDTs.
- Example with TTL
-
This example creates a user-defined type (UDT)
cycling.basic_info_withTTLthat consists of personal data about an individual cyclist, which includes thenext_racecolumn that will be set with a timestamp and time-to-live (TTL).CREATE TYPE IF NOT EXISTS cycling.basic_info_expire ( birthday timestamp, nationality text, height text, weight text, next_race text );To insert an entire row of data into a table using a timestamp and TTL, specify the values with an
INSERTcommand:INSERT INTO cycling.basic_info_TTL_expire ( id, lastname, basics ) VALUES ( e7ae5cf3-d358-4d99-b900-85902fda9bb0, 'FRAME', { birthday : '1993-06-18', nationality : 'New Zealand', weight : '175', height : '72', next_race : 'Amgen Tour of California' } ) USING TIMESTAMP 100 AND TTL 10000;To insert a single UDT value with a TTL, use a
UPDATEcommand:UPDATE cycling.basic_info_TTL_expire USING TTL 100 SET basics = { birthday : '1993-06-18', nationality : 'New Zealand', weight : '175', height : '72', next_race : 'Tour de France' } WHERE id = e7ae5cf3-d358-4d99-b900-85902fda9bb0;To check the write time and TTL values of a UDT use the WRITETIME and TTL functions in a
SELECTcommand:SELECT WRITETIME(basics), TTL(basics) FROM cycling.basic_info_TTL_expire WHERE id = e7ae5cf3-d358-4d99-b900-85902fda9bb0;writetime(basics) | ttl(basics) -------------------+------------- 1717445094201831 | 98 (1 rows)It is important to note that you cannot use selection function
writeTimeon non-frozen UDT basics. This is because the UDT is not frozen and the write time is not stored with the UDT.A string with a single quote in a UDT
textfield is returned with two quotes in queries andCOPYcommands. For example, if you store the stringSingle ' quotein a UDTtextfield, the string is returned asSingle '' Quote.