Apache Cassandra 3.11.6:群集键错误,cass压力写入后表中未定义列名

Apache Cassandra 3.11.6:群集键错误,cass压力写入后表中未定义列名,cassandra,cassandra-3.0,cqlsh,cassandra-stress,Cassandra,Cassandra 3.0,Cqlsh,Cassandra Stress,我目前遇到一个问题,我试图从cassandra中选择或插入特定的列数据,并不断得到一个未定义的列名错误,尽管在查看表时列名是集群键。但是,其他列的行为正常 keyspace_name | table_name | column_name | clustering_order | column_name_bytes | kind | position | type ---------------+------------+-------------+---------------

我目前遇到一个问题,我试图从cassandra中选择或插入特定的列数据,并不断得到一个未定义的列名错误,尽管在查看表时列名是集群键。但是,其他列的行为正常

keyspace_name | table_name | column_name | clustering_order | column_name_bytes | kind          | position | type
---------------+------------+-------------+------------------+-------------------+---------------+----------+------
    keyspace1 |  standard1 |          C0 |             none |            0x4330 |        static |       -1 | blob
    keyspace1 |  standard1 |     column1 |              asc |  0x636f6c756d6e31 |    clustering |        0 | text
    keyspace1 |  standard1 |         key |             none |          0x6b6579 | partition_key |        0 | blob
    keyspace1 |  standard1 |       value |             none |      0x76616c7565 |       regular |       -1 | blob

cqlsh> SELECT  "column1" from keyspace1.standard1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Undefined column name column1"

cqlsh> SELECT  "C0" from keyspace1.standard1;

 C0
------------------------
 0xdc9e1bf05eab897f470a
 0x5ff08459ccd892a25f91
 0x85182fdfe7f86306cd58
 0x10f1dd6febff8cbcf3ad
 0xb8e05320cd1037d6e317
此外,在插入数据时,尽管column1是“未定义的”,但它仍然需要作为集群键

cqlsh> insert into keyspace1.standard1 (key) VALUES (0xcccc) ;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Some clustering keys are missing: column1"
但是,将数据插入其他列时,行为是正常的

cqlsh> insert into keyspace1.standard1 (key, "C0") VALUES (0xcccc, 0xbbbb) ;  
cqlsh> SELECT  "C0" from keyspace1.standard1;

 C0                      key
 ----------------------- ------------------------
 0xdc9e1bf05eab897f470a 0x37373539364d4f323330
                 0xbbbb                 0xcccc
 0x5ff08459ccd892a25f91 0x4f503030314c35393330
 0x85182fdfe7f86306cd58 0x30503337373039503231
 0x10f1dd6febff8cbcf3ad 0x394e35344e4b34383631
 0xb8e05320cd1037d6e317 0x4f384c4b37394c4f3631
这是在我运行cassandra stress之后,我在3.11.4中运行了类似的测试,效果很好,但是当查询column1(集群键)条目时,它们都是空的,这是我认为不可能的


这是从3.11.4开始更改的预期行为吗?

看起来您正在处理一个紧凑的存储表

您可以在cqlsh中验证这一点:

describe table keyspace1.standard1;
如果您看到具有压缩存储的
,则您有一个压缩存储表

从此表中删除压缩存储格式后,您应该能够选择列
column1

要放弃紧凑型存储:

ALTER TABLE keyspace1.standard1 DROP COMPACT STORAGE;
我不确定您是如何得到表定义的(除非cassandra stress为您创建了它)。列
column1
通常位于从压缩存储迁移的表中

迁移存储格式时通常会发生以下情况(对于没有群集列的表):

  • 添加了两个新列column1 text和value blob。这些列包含在CQL表模式之外写入到Thrift表的任何数据
  • column1变为集群列
  • 所有常规列都成为静态列
更多信息可在此处找到: