我是cassandra的新手,我目前在虚拟应用程序中使用cassandracsharpdriver。我想获取用户在给定的关键空间中描述的所有表的列表。

        Cluster cluster = Cluster.Builder().AddContactPoints("IPAddress").Build();
        Session session = cluster.Connect("MyKeySpace");
. 在此代码中,我想获取mykeyspace的所有表的列表

有帮助吗?

解决方案

我会通过datastax cassandra c#驱动程序准备那个表列表的方式如何编写该表列表:

连接到群集:

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

我将创建一个生成的语言统计码,并使用准备好的语句(因为这只是一个好主意)绑定keyspace的名称。我的CQL语句只是选择生成的,这应该是您需要的。

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);
}
.

现在,您应该有一个表格列表您可以添加到UI。

其他提示

可以运行:

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

它违背“系统”keyspace。

  1. get 列名

    SELECT column_name FROM system.schema_columns WHERE keyspace_name = 'KeySpaceName' AND columnfamily_name = 'TableName';
    
  2. get 列族名称,即表名:

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

有选项要使用群集元数据,也可以获得如此键列表的字符串列表

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top