如何获取Cassandra中密钥空间所有表的列表

4

我是新手,对Cassandra不太熟悉。目前我在一个虚拟应用程序中使用CassandraCSharpDriver。我想获取给定键空间中用户描述的所有表的列表。

        Cluster cluster = Cluster.Builder().AddContactPoints("IPAddress").Build();
        Session session = cluster.Connect("MyKeySpace");

在这段代码中,我想要获取MyKeySpace所有表的列表。


我不确定,“如何检查Cassandra表是否存在”的解决方案对我来说是否有效...或者可能是我没有正确使用它。 - Sameer Rathoud
4个回答

5

您可以运行以下命令:

select * from system.schema_columnfamilies where keyspace_name='MyKeySpace';

它运行在“system”键空间中。


很抱歉,如果我没有恰当地传达我的信息。实际上,我已经在“MyKeySpace”中创建了3个表,我想在运行时通过UI选择其中一个来运行我的查询。为了在我的UI中显示,我希望获得“MyKeySpace”中所有表的列表。 - Sameer Rathoud
1
查询将精确地返回您所需的内容。响应中的columnfamily_name字段将包含表名。 - ashic
@ashic 对于正确的查询加一。这不是你的错,是OP不知道如何处理结果。 - Aaron

5
我将详细说明如何使用DataStax Cassandra C#驱动程序准备表列表:
连接到您的集群:
Cluster cluster = Cluster.Builder().AddContactPoints("IPAddress").Build();
Session session = cluster.Connect();

我将创建一个List<String>并使用预处理语句(因为这是一个好习惯),将您的键空间名称绑定到它上面。我的CQL语句只选择columnfamily_name,这应该就是您需要的内容。
List<String> tableList = new List<String>();

String strCQL = "SELECT columnfamily_name "
    + "FROM system.schema_columnfamilies WHERE keyspace_name=? ";
PreparedStatement pStatement = _session.Prepare(strCQL);
BoundStatement boundStatement = new BoundStatement(pStatement);
boundStatement.Bind("MyKeySpace");

现在我将执行该语句,遍历结果,并将每个表格名称添加到我上面创建的列表中。
RowSet results = session.Execute(boundStatement);

foreach (Row result in results.GetRows())
{
    tableName = result.GetValue<String>("columnfamily_name");
    tableList.Add(tableName);
}

现在,您应该拥有一个表格列表,可以将其添加到您的用户界面中。

1
我知道在这个问题上我可能提供了有些过多的协助,但我很高兴从一位真正在使用最近受支持的驱动程序的人那里得到了一个问题。 - Aaron

1
  1. Get column names:

    SELECT column_name FROM system.schema_columns WHERE keyspace_name = 'KeySpaceName' AND columnfamily_name = 'TableName';
    
  2. Get column family names, i.e., table names:

    select columnfamily_name from system.schema_columnfamilies where keyspace_name='KeySpaceName';
    

0

还有一种选项可以使用集群元数据来获取键空间的字符串列表,如下所示

var cluster = Cluster.Builder().AddContactPoints("IPAddress").Build();
var keyspaces = cluster.Metadata.GetKeyspaces();
foreach (var keyspaceName in keyspaces)
{
   Console.WriteLine(keyspaceName);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接