用户定义的数据类型:
用户定义数据 (UDT) 的优点之一是将多个数据字段附加到一列。在 Cassandra 中,UDT 起着至关重要的作用,它允许组相关的字段(例如字段 1、字段 2 等)可以是数据,并具有命名和类型。
在 Cassandra 中,UDT 的优势之一是有助于增加表和数据模型的灵活性。我们可以构造Cassandra提供的UDT:UDT,即User-Defined Type。正如我们在示例中所展示的,用户定义类型 (UDT) 可以附加多个数据字段,其中每个命名和类型都可以映射到单个列。
要构造用户定义类型 (UDT),任何有效的数据类型都可以用于 Cassandra 中的字段类型,包括集合(SET、LIST、MAP)或任何其他 UDT。一旦在 Cassandra 中创建了 UDT,就可以使用它来定义主表中的列。
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,
);
创建 UDT 的简单步骤:
步骤 1:创建一个 KEYSPACE,如果不存在。句法:
create_keyspace_statement ::=
CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name
WITH options
步骤 2:使用以下 CQL 查询创建键空间。
CREATE KEYSPACE Emp
WITH replication = {'class': 'SimpleStrategy',
'replication_factor' : 1};
要检查密钥空间架构,请使用以下 CQl 查询。
DESCRIBE KEYSPACE Emp;
第 3 步:使用以下 CQL 查询为当前地址创建员工用户数据类型。例如,当前地址的用户数据类型
CREATE TYPE Emp.Current_add
(
Emp_id int,
h_no text,
city text,
state text,
pin_code int,
country text
);
这里 Current_add 是 Cassandra 用户定义的数据类型。
图 –用户定义类型 (UDT)
步骤 4:创建表注册,将 current_address UDT 作为列之一,例如:
CREATE TABLE Registration
(
Emp_id int PRIMARY KEY,
Emp_Name text,
current_address FROZEN
);
步骤 5:要在 Cassandra 中使用 UDT 插入数据,请使用以下 CQL 查询。
格式 1:使用 JSON(JavaScript Object Notation)格式。
在 Cassandra 中,我们还可以插入 JSON(JavaScript Object Notation)格式的数据。例如:使用 JSON 格式的 CQL 查询。
INSERT INTO Registration JSON'
{
"Emp_id" : 2000,
"current_address" : { "h_no" : "A 210", "city" :
"delhi", "state" : "DL",
"pin_code" :"201307",
"country" :"india"},
"Emp_Name" : "Ashish Rana"}' ;
格式 2:简单插入
INSERT INTO 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 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 Registration(Emp_id, Emp_Name, current_address )
values (1002, 'Dhruv Gupta', { h_no : 'C 210', city
: 'delhi', state : 'DL', pin_code
:12345, country :'IN'});
输出:
图 – UDT 表插入
在这种情况下,我们将看到如何在不插入一个或多个字段的值的情况下插入命令。
例如,我们没有在此处传递字段的值。 Cassandra 将如何处理这个问题?
好吧,它会将这个值作为一个普通值插入,但它会将字段值设为空。每个字段值,除了我们在插入时没有传递的主键外,Cassandra 将其视为空值。
不插入UDT的一个字段或多个字段值的CQL查询:
INSERT INTO Registration(Emp_id, Emp_Name, current_address )
values (1003, 'Amit Gupta', { h_no : 'D 210', city
: 'Bangalore', state : 'MH', pin_code :12345}
);
INSERT INTO Registration(Emp_id, Emp_Name, current_address )
values (1004, 'Shivang Rana', { h_no : 'E 210', city
: 'Hyderabad', state : 'HYD'});
输出:
图 –未插入一个或多个字段值的 UDT 表