运行时:
cqlsh> SELECT * FROM system_schema.tables WHERE keyspace_name = 'demo_fds';
我看到感兴趣的表名(afifarmrecord
(:
demo_fds | afifarmrecord | 0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null | | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} | 1 |
0.1 | 0 | {} | {'compound'} | 864000 | 571c9960-3bba-11eb-93dc-9726102541d7 | 2048 | 0 |
128 | 0 | 99PERCENTILE
demo_fds | shactivity | 0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null | | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} | 1 |
0.1 | 0 | {} | {'compound'} | 864000 | 57eb8220-3bba-11eb-93dc-9726102541d7 | 2048 | 0 |
128 | 0 | 99PERCENTILE
demo_fds | shrumandeating | 0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null | | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} | 1 |
0.1 | 0 | {} | {'compound'} | 864000 | 581c0800-3bba-11eb-93dc-9726102541d7 | 2048 | 0 |
128 | 0 | 99PERCENTILE
demo_fds | sxrecord | 0.01 | {'keys': 'ALL', 'rows_per_partition': 'NONE'} | null | | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompa
ctionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} | 1 |
0.1 | 0 | {} | {'compound'} | 864000 | 585e1a10-3bba-11eb-93dc-9726102541d7 | 2048 | 0 |
128 | 0 | 99PERCENTILE
然而,afifarmrecord
和另一个空表之间的行为不同
cqlsh> select * from demo_fds.afifarmrecord limit 20;
'afifarmrecord' not found in keyspace 'demo_fds'
cqlsh> select * from demo_fds.shactivity limit 20;
mark | timestamp | serializedrecord
------+-----------+------------------
(0 rows)
一个只是空的,但另一个似乎不存在。我正试图弄清楚为什么会发生这种情况,因为我相信我正在以相同的方式创建所有表,所以奇怪的是,其中只有一个表出现这种症状。
更新1:集群和密钥空间的状态
$ nodetool describecluster
Cluster Information:
Name: Test Cluster
Snitch: org.apache.cassandra.locator.SimpleSnitch
DynamicEndPointSnitch: enabled
Partitioner: org.apache.cassandra.dht.Murmur3Partitioner
Schema versions:
24104e25-be79-3da1-a8b7-d7b0be9034b8: [127.0.0.1]
$ nodetool status demo_fds
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Owns (effective) Host ID Token Rack
UN 127.0.0.1 3.03 GiB 100.0% e0bbc831-8686-43a6-b99c-8ea5596c8581 3840369556391221198 rack1
我的猜测是,您正在根据表的创建时间(id
列(以编程方式创建表:
afifarmrecord - 571c9960-3bba-11eb-93dc-9726102541d7 = 6:08:27am PST
shactivity - 57eb8220-3bba-11eb-93dc-9726102541d7 = 6:08:28am PST
shrumandeating - 581c0800-3bba-11eb-93dc-9726102541d7 = 6:08:29am PST
sxrecord - 585e1a10-3bba-11eb-93dc-9726102541d7 = 6:08:29am PST
表ID是一个版本1的UUID,其中包括创建它的时间戳。在上面的例子中,所有表ID都是在12月11日创建的(太平洋(。
由于它们的创建时间很近,这让我相信您是在用程序在集群中创建表,而没有在调用下一个DDL更新之前首先检查每个DDL语句是否已在集群中成功传播。
因此,它导致了模式分歧,我怀疑这就是这里正在发生的事情。当您查询集群中的一个节点时,它不知道该表,因此返回";未找到";错误
您通常需要通过执行滚动重新启动来解决模式分歧。您可以检查所有节点是否与nodetool describecluster
命令一致,并确保所有节点中只有一个架构版本。干杯