在 Cassandra 中如何将一个 UDT 嵌套在另一个 UDT 中?
How do you nest a UDT inside another UDT in Cassandra?
我在 cassandra 中创建了以下用户定义类型 (UDT):
CREATE TYPE keyspace.location (
latitude text,
longitude text,
accuracy text,
address text
);
CREATE TYPE keyspace.person (
name text,
contact_no text,
alternate_contact text
);
我想用它们来创建另一个 UDT
CREATE TYPE keyspace.pinpoint(
user <person>,
location <location>
);
您需要将这些嵌套的 UDT 声明为 frozen<UDTName>
,例如:
CREATE TYPE keyspace.pinpoint(
user frozen<person>,
location frozen<location>
);
但这意味着您将无法更新它们的各个字段 - 您只能使用完整的 UDT 实例更新整个字段,例如,完整的 user
或 location
.
您可以通过简单地将您的 UDT 指定为另一个 UDT 中的类型来嵌套 UDT:
CREATE TYPE keyspace.pinpoint (
user person,
location location
);
您不要将它们括在 <>
括号中,因为它们用于集合。
附带说明一下,除非您别无选择,否则我个人不会嵌套 UDT。 UDT 不如本机列灵活。在嵌套的 UDT 中插入或更新数据会变得非常复杂且难以维护。
尽可能使用通用 table 定义。例如,不要定义类型 pinpoint
,而是尝试将 table 与原生列类型和聚集行一起使用。干杯!
我在 cassandra 中创建了以下用户定义类型 (UDT):
CREATE TYPE keyspace.location (
latitude text,
longitude text,
accuracy text,
address text
);
CREATE TYPE keyspace.person (
name text,
contact_no text,
alternate_contact text
);
我想用它们来创建另一个 UDT
CREATE TYPE keyspace.pinpoint(
user <person>,
location <location>
);
您需要将这些嵌套的 UDT 声明为 frozen<UDTName>
,例如:
CREATE TYPE keyspace.pinpoint(
user frozen<person>,
location frozen<location>
);
但这意味着您将无法更新它们的各个字段 - 您只能使用完整的 UDT 实例更新整个字段,例如,完整的 user
或 location
.
您可以通过简单地将您的 UDT 指定为另一个 UDT 中的类型来嵌套 UDT:
CREATE TYPE keyspace.pinpoint (
user person,
location location
);
您不要将它们括在 <>
括号中,因为它们用于集合。
附带说明一下,除非您别无选择,否则我个人不会嵌套 UDT。 UDT 不如本机列灵活。在嵌套的 UDT 中插入或更新数据会变得非常复杂且难以维护。
尽可能使用通用 table 定义。例如,不要定义类型 pinpoint
,而是尝试将 table 与原生列类型和聚集行一起使用。干杯!