我可以将计数器类型字段用作我的 C* table 的主键吗?

Can I user counter type field as primary key of my C* table?

当我尝试创建如下 table 时

 create table if not exists counter_temp(id counter PRIMARY KEY , comment text);

报错如下

Multiple markers at this line

  • For a table with counter columns, all columns except the primary key must be type counter

  • counter type is not supported for PRIMARY KEY part

问题 1:

什么原因,计数器列不允许作为主键的一部分?

问题 2 : 当我尝试创建如下时

创建 table 如果不存在 counter_temp(id uuid PRIMARY KEY, counter_t counter, comment text)

Error : Cant mix counter and non-counter columns in the same table

What is wrong here ? how to handle it correct way ?

问题 3 :

我在 Dev env 中有一个 table emp( emp_id counter, emp_name text) 有数据,现在我需要将该数据复制到另一个 SIT env emp( emp_id 计数器,emp_name 文本)table ?

能否正确复制计数器字段?

问题 1 的简短答案是 ,因为它已在错误消息中传达。但即使它被允许,也没有任何意义 - 当您更改主键的值时,您基本上是在创建一个具有不同主键的新行。

对于 Q2 - 如果 table 中至少有一个 counter 列,则所有其他常规列的类型应为 counter。如果您需要添加评论字段,只需创建第二个 table,主键为 UUID 并同时插入或读取数据 to/from 2 tables。

对于第 3 季度 - cqlsh 的 COPY 命令支持 tables,带有针对较新 Cassandra 版本的计数器(其中实现了对 CASSANDRA-9043 的修复)。此外,Spark Cassandra Connector 能够使用计数器从 tables 读取并写入它们。但在这两种情况下,请确保目标 table 为空,否则新值将附加到现有值。