如何更新Cassandra中的Timeuuid列



如何更新卡桑德拉(Cassandra(中的timeuuid列?

我尝试了以下查询

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

,消息失败了

invalidRequest:来自服务器的错误:代码= 2200 [无效查询]消息="无效字符串常数(99b47d70-b465-11e9-8080-80808080808080(for type time timeuuid"

所以我尝试将恒定值投入到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);

这一次它失败了

语法Exception:第1:34在输入中没有可行的替代方案'('(更新mytable设置mycolumn = cast

(

我看到了有关铸件功能的文档,并且timeuuid未在任何其他类型的输出类型下列出。

https://docs.datastax.com/en/dse/5.1/cql/cql/cql/cql_reference/refcqlfunction.html#refcqlfunction__cast

这是否意味着创建后无法更新时间元素列?

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

更新语句设置子句不能用于更改主密钥字段;因此,只有在目标字段不属于主要密钥字段的一部分时才能设置新的timeuuid。

因此,可以更新timeuuid列。mycolumn不是主要密钥的一部分。

更新2:

即使以下命令发生失败,同一错误 no viable alternative at input

UPDATE website SET api_key = api_key WHERE 1;

那么我做错了什么?

我找到了通过CQLSH(Cassandra(插入硬编码UUID的解决方案

您不应该将引号周围放置在UUID周围,以停止将其解释为字符串,即

无需引用uuid

最新更新