【问题标题】:How to update timeuuid column in cassandra如何更新 cassandra 中的 timeuuid 列
【发布时间】:2019-12-10 04:12:30
【问题描述】:

如何在 Cassandra 中更新 timeuuid 列?

我尝试了以下查询

cqlsh:mydb> UPDATE mytable SET mycolumn = '99b47d70-b465-11e9-8080-808080808080' WHERE mycolumn= '99a53b30-b465-11e9-8080-808080808080';

它失败并显示消息

InvalidRequest:来自服务器的错误:code=2200 [Invalid query] message="timeuuid 类型的“mycolumn”的无效字符串常量 (99b47d70-b465-11e9-8080-808080808080)”

所以我尝试将常量值转换为 timeuuid

cqlsh:mydb> UPDATE mytable SET mycolumn = cast('99b47d70-b465-11e9-8080-808080808080' as timeuuid) WHERE mycolumn= cast('99a53b30-b465-11e9-8080-808080808080' as timeuuid);

这次它失败了,错误

SyntaxException: line 1:34 在输入 '(' 处没有可行的替代方案 (UPDATE mytable SET mycolumn = cast

我看到了关于 cast 函数的文档,timeuuid 没有在任何其他类型的输出类型下列出。

https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/refCqlFunction.html#refCqlFunction__cast

这是否意味着 timeuuid 列一旦创建就无法更新?

更新: 我在上面的页面上看到了以下信息

UPDATE 语句 SET 子句不能用于更改 PRIMARY KEY 字段;因此,只有当目标字段不属于 PRIMARY KEY 字段时,才能设置新的 timeuuid。

因此,可以更新 timeuuid 列。 mycolumn 不是 PRIMARY 键的一部分。

更新 2:

即使以下命令也失败并出现相同的错误no viable alternative at input

UPDATE website SET api_key = api_key WHERE 1;

那么我做错了什么?

【问题讨论】:

    标签: cassandra cql timeuuid


    【解决方案1】:

    我在Inserting a hard-coded UUID via CQLsh (Cassandra)找到了解决方案

    您不应该在 UUID 周围加上引号来阻止它被解释为字符串,即

    没有必要引用 uuid

    【讨论】:

      猜你喜欢
      • 2013-02-19
      • 2012-07-01
      • 1970-01-01
      • 2017-04-04
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多