【问题标题】:Update a collection type of a custom type in cassandra在 cassandra 中更新自定义类型的集合类型
【发布时间】:2018-07-17 16:29:03
【问题描述】:

如何将新元素附加到 Cassandra 中自定义类型的集合中。

custom_type 是:

CREATE TYPE custom_type (
   normal_type    TEXT,
   set_type Set<TEXT>
);

要更新的表格是:

CREATE TABLE test_table (
   id          TEXT,
   my_type      FROZEN<custom_type>,
   clustering_key TEXT,
   PRIMARY KEY ((id),clustering_key)
);

试过下面的查询,但没有用。

@Query("update test_table set  my_type.set_type = my_type.set_type + {'newelement'} where id=?1 and clustering_key=?2")

关于如何做到这一点的任何想法? 使用[cqlsh 5.0.1 | Cassandra 3.11.1 | CQL spec 3.4.4

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    当您说frozen 时,整个值被视为一个片段(blob),因此您无法更新该字段的部分内容。 Official documentation 状态:

    使用frozen 关键字时,您不能更新用户定义类型值的一部分。必须覆盖整个值。 Cassandra 将冻结的用户定义类型的值视为 blob。

    【讨论】:

    • 当我尝试不冻结时出现以下错误。""不支持嵌套非冻结集合的非冻结 UDT"" 显然它不允许在 udts 中进行非冻结集合。那么唯一的解决方案是首先选择 udt 然后更新整体,因为我事先没有 udt 对象?除此之外,您还有什么建议吗?
    • 是的,frozen 只能在 Cassandra 中使用。如果您想保证同时没有其他人更改数据,您可以添加一些将用作保护的字段,并使用轻量级事务(UPDATEIF 条件) - 但这会对性能产生影响写入前需要读取数据
    猜你喜欢
    • 2016-08-10
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多