如何更新cassandra中的timeuuid列

时间:2019-08-01 14:19:24

标签: cassandra cql timeuuid

如何在Cassandra中更新timeuuid列?

我尝试了以下查询

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

它失败并显示消息

  

InvalidRequest:来自服务器的错误:代码= 2200 [Invalid query] message =“无效的STRING常量(99b47d70-b465-11e9-8080-808080808080)对于类型为timeuuid的“ mycolumn”

所以我尝试将常量值转换为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:行1:34输入'('(更新mytable SET mycolumn = 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;

那我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

  

您不应在UUID周围加上引号,以免将其解释为字符串,即

无需引用uuid