【发布时间】:2013-04-17 09:14:23
【问题描述】:
我想知道 CQL3 中是否有一个查询允许您获取具有静态架构的特定列族的列名?
在此先感谢:)
【问题讨论】:
我想知道 CQL3 中是否有一个查询允许您获取具有静态架构的特定列族的列名?
在此先感谢:)
【问题讨论】:
如果您想使用 CQL3 获取特定表的列名,那么我想试试这个
select * from system.schema_columns WHERE keyspace_name='#KS' AND columnfamily_name='#CF' allow filtering;
注意:where 子句中的 keyspace_name 是可选的。它主要用于更好的过滤目的(例如,多个键空间中具有相同名称的表)
【讨论】:
您可以使用system 键空间来执行此操作:
SELECT column_name FROM system.schema_columnfamilies
WHERE keyspace_name = 'testks' AND columnfamily_name = 'testcf';
cqlsh 中的输出(使用 cql3):
column_name
-------------
password
您可以使用以下方法计算列的键:
SELECT key_aliases FROM system.schema_columnfamilies WHERE keyspace_name='testks'
AND columnfamily_name='testcf';
输出:
key_aliases
--------------
["username"]
【讨论】:
根据我最近的测试,我们应该使用 schema_columns,而不是 schema_columnfamilies 来获取所有列名。 schema_columnfamilies 可用于获取表名。
获取列名:
SELECT column_name FROM system.schema_columns WHERE keyspace_name = 'KeySpaceName' AND columnfamily_name = 'TableName';
获取列族名称,即表名:
select columnfamily_name from system.schema_columnfamilies where keyspace_name='KeySpaceName';
【讨论】:
根据 Cassandra 3.x 的最新文档,以上所有答案都不起作用,现在显示列的查询将是这样的。
SELECT * FROM system_schema.columns WHERE keyspace_name = 'xxxx' AND table_name = 'xxx';
【讨论】: