Apache Cassandra 3.11.6:集群键错误,cass-stress 写入后 table 中的未定义列名
Apache Cassandra 3.11.6: clustering key error, Undefined column name in table after cass-stress write
我目前遇到一个问题,我尝试 SELECT 或从 cassandra 插入特定的列数据并不断收到未定义的列名错误,尽管在查看时列名是聚类键table。但是,其他列的行为正常。
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(聚类键)条目时都是null,这是我认为不可能的事情。
这是从 3.11.4 开始改变的预期行为吗?
看起来您正在处理紧凑型存储 table。
您可以在 cqlsh 中验证:
describe table keyspace1.standard1;
如果您看到 WITH COMPACT STORAGE
,那么您有一个紧凑的存储空间 table。
从 table 中删除压缩存储格式后,您应该能够 select 列 column1
.
要删除压缩存储:
ALTER TABLE keyspace1.standard1 DROP COMPACT STORAGE;
我不确定您是如何得出 table 定义的(除非 cassandra-stress 为您创建了它)。 column1
列通常在从压缩存储迁移的 table 中找到。
通常在迁移存储格式时会发生以下情况(对于没有聚类列的table):
- 添加了两个新列 column1 text 和 value blob。这些列包含在 CQL table 模式之外写入 Thrift table.
的任何数据
- column1 成为集群列。
- 所有常规列都变成静态列。
可在此处找到更多信息:
https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/dropCompactStorage.html
我目前遇到一个问题,我尝试 SELECT 或从 cassandra 插入特定的列数据并不断收到未定义的列名错误,尽管在查看时列名是聚类键table。但是,其他列的行为正常。
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(聚类键)条目时都是null,这是我认为不可能的事情。
这是从 3.11.4 开始改变的预期行为吗?
看起来您正在处理紧凑型存储 table。
您可以在 cqlsh 中验证:
describe table keyspace1.standard1;
如果您看到 WITH COMPACT STORAGE
,那么您有一个紧凑的存储空间 table。
从 table 中删除压缩存储格式后,您应该能够 select 列 column1
.
要删除压缩存储:
ALTER TABLE keyspace1.standard1 DROP COMPACT STORAGE;
我不确定您是如何得出 table 定义的(除非 cassandra-stress 为您创建了它)。 column1
列通常在从压缩存储迁移的 table 中找到。
通常在迁移存储格式时会发生以下情况(对于没有聚类列的table):
- 添加了两个新列 column1 text 和 value blob。这些列包含在 CQL table 模式之外写入 Thrift table. 的任何数据
- column1 成为集群列。
- 所有常规列都变成静态列。
可在此处找到更多信息: https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/dropCompactStorage.html