我可以使用counter type字段作为c*表的主键吗?

rsaldnfx  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(451)

当我试图创建如下表

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

它给出的错误如下
这条线上有多个标记
对于包含counter列的表,除主键外的所有列都必须是counter类型
主键部分不支持计数器类型
问题1:
什么原因,计数器列不允许作为主键的一部分?
问题2:当我试图创造如下
创建表如果不存在counter\u temp(id uuid主键,counter\u t counter,注解文本)
错误:不能在同一表中混合计数器和非计数器列
这里怎么了?如何正确处理?
问题3:
我在dev env中有一个表emp(emp\u id counter,emp\u name text),其中有数据,现在我需要将该数据复制到另一个sit env emp(emp\u id counter,emp\u name text)表中?
它能做到吗?它能正确地复制计数器字段吗?

uttx8gqw

uttx8gqw1#

问题1的简短答案是“否”,因为它是在错误消息中传达的。但即使允许这样做,也没有任何意义—当您更改主键的值时,基本上就是用不同的主键创建新行。
对于q2-如果至少有一个 counter 列,则所有其他常规列都应具有类型 counter . 如果需要添加注解字段,只需创建第二个表,其中 UUID 主键&同时向两个表插入或读取数据。
对于q3-cqlsh COPY 命令支持带有较新cassandra版本计数器的表(其中实现了cassandra-9043的修复)。此外,spark cassandra连接器能够从带有计数器的表中读取数据并对其进行写入。但在这两种情况下,请确保目标表为空,否则新值将附加到现有值。

相关问题