在 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 实例更新整个字段,例如,完整的 userlocation.

您可以通过简单地将您的 UDT 指定为另一个 UDT 中的类型来嵌套 UDT:

CREATE TYPE keyspace.pinpoint (
    user person,
    location location
);

您不要将它们括在 <> 括号中,因为它们用于集合。

附带说明一下,除非您别无选择,否则我个人不会嵌套 UDT。 UDT 不如本机列灵活。在嵌套的 UDT 中插入或更新数据会变得非常复杂且难以维护。

尽可能使用通用 table 定义。例如,不要定义类型 pinpoint,而是尝试将 table 与原生列类型和聚集行一起使用。干杯!