【问题标题】:how to get the list of all table of a key space in cassandra如何获取cassandra中关键空间的所有表的列表
【发布时间】:2014-09-23 13:22:02
【问题描述】:

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

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

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

【问题讨论】:

  • 我不确定,“如何检查 Cassandra 表是否存在”中提到的解决方案对我不起作用......或者可能是我没有正确使用它......跨度>

标签: c# database cassandra datastax cqlsh


【解决方案1】:

我将介绍如何使用 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);
}

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

【讨论】:

  • 我知道我可能在这个问题上提供了太多的帮助,但我很高兴收到一个实际使用最新支持驱动程序的人的问题。
【解决方案2】:

你可以运行:

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

它针对“系统”键空间运行。

【讨论】:

  • 对不起,如果我没有正确传达我的信息,实际上我已经在“MyKeySpace”中创建了 3 个表,我想在运行时通过 UI 选择其中一个来运行我的查询。要在我的 UI 中显示,我想要“MyKeySpace”中所有表格的列表
  • 查询将准确地返回您。响应的 columnfamily_name 字段将包含表名。
  • @ashic +1 获取正确查询。 OP 不知道如何处理结果不是你的错。
【解决方案3】:
  1. 获取列名

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

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

【讨论】:

    【解决方案4】:

    也可以选择使用集群元数据来获取键空间的字符串列表,像这样

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

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 2013-09-13
      • 1970-01-01
      • 2015-10-26
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多