微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Apache Cassandra 3.11.6:集群键错误,cass-stress写入后表中的未定义列名

我目前遇到一个问题,尽管在查看表时列名是集群键,但我还是尝试从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是“ undefined”,但仍需要作为聚簇键

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中对此进行验证:

for column in ['Gender']:
    df[column].fillna(df[column].mode()[0],inplace = True)

如果看到describe table keyspace1.standard1; ,那么您有一个紧凑的存储表。

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

要删除紧凑型存储,请执行以下操作:

column1

我不确定您如何结束表定义(除非cassandra-stress为您创建了它)。通常在从紧凑型存储中迁移的表中找到ALTER TABLE keyspace1.standard1 DROP COMPACT STORAGE; 列。

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

  • 添加了两个新列column1文本和值blob。这些列包含在CQL表架构之外写入Thrift表的所有数据。
  • column1成为群集列。
  • 所有常规列都变为静态列。

更多信息可以在这里找到: https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/dropCompactStorage.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。