WARNING: CQL3 tables are intentionally omitted from 'describe' output.
See https://issues.apache.org/jira/browse/CASSANDRA-4377 for details.
Sorry, no Keyspace nor (non-CQL3) ColumnFamily was found with name: student (if this is a CQL3 table, you should use cqlsh instead)
基本上,表和列族是被强制放入同一个桶中的不同实体。添加 WITH COMPACT STORAGE 从本质上说,表是一个列族。随之而来的是,除了对比较器的访问之外,缺乏任何模式管理(添加或删除列)。 编辑20200905 我们能从表中删除列吗? 你也许能做到这一点。sylvainlebresne写了一个节俭到cql3的升级指南,它将为您提供一些必要的细节。我还建议通读上面提到的jira票据(cassandra-4377),因为它涵盖了许多使之困难的深入的技术挑战。
1条答案
按热度按时间qcuzuvrc1#
这可以追溯到cql3的原始实现,并对其进行了更改,使其能够在原始的基于节约的存储引擎之上抽象出一个“类似sql”的宽行结构。最终,管理模式归结为底层结构是表还是列族。
作为一个示例,我将使用ApacheCassandra(2.1.19)的旧安装创建两个表:
我将在每个表中插入一行:
然后我将使用旧的cassandra cli工具查看表:
您看到第一个结果中的空/“ghost”列值了吗?该空列值是cql3在列值和表元数据之间的链接。如果不存在,那么cql就不能用于管理表的列。
用于类型转换的比较器是通过节俭真正暴露出来的。这种缺乏元数据控制/暴露的情况使得cassandra在cql之前被认为是“无模式的”。如果我开一个
describe studentcomp
在cassandra cli中,我可以看到使用的比较器(验证类):但如果我尝试
describe student
,我看到这个:基本上,表和列族是被强制放入同一个桶中的不同实体。添加
WITH COMPACT STORAGE
从本质上说,表是一个列族。随之而来的是,除了对比较器的访问之外,缺乏任何模式管理(添加或删除列)。编辑20200905
我们能从表中删除列吗?
你也许能做到这一点。sylvainlebresne写了一个节俭到cql3的升级指南,它将为您提供一些必要的细节。我还建议通读上面提到的jira票据(cassandra-4377),因为它涵盖了许多使之困难的深入的技术挑战。