【问题标题】:How do you nest a UDT inside another UDT in Cassandra?如何在 Cassandra 中将 UDT 嵌套在另一个 UDT 中?
【发布时间】:2021-06-08 05:46:39
【问题描述】:

我在 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>
);

【问题讨论】:

    标签: cassandra cassandra-3.0 cassandra-2.0 spring-data-cassandra cassandra-2.1


    【解决方案1】:

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

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

    不要将它们括在&lt;&gt; 括号中,因为它们用于集合。

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

    尽可能尝试使用通用表定义。例如,不要定义类型pinpoint,而是尝试使用具有本机列类型和聚集行的表。干杯!

    【讨论】:

      【解决方案2】:

      您需要将这些嵌套的 UDT 声明为 frozen&lt;UDTName&gt;,例如:

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

      但这意味着您将无法更新它们的各个字段 - 您只能使用完整的 UDT 实例更新整个字段,例如完整的 userlocation

      【讨论】:

        猜你喜欢
        • 2015-04-18
        • 2018-01-31
        • 2017-03-07
        • 2016-09-15
        • 1970-01-01
        • 2015-05-16
        • 2020-07-17
        • 2018-08-23
        • 1970-01-01
        相关资源
        最近更新 更多