Pergunta

Sou novo no cassandra, atualmente estou usando o CassandraCSharpDriver em um aplicativo fictício.Quero obter a lista de todas as tabelas que um usuário descreveu em um determinado espaço-chave.

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

Neste código quero pegar a lista de todas as tabelas do MyKeySpace

Foi útil?

Solução

Vou explicar como prepararia essa lista de tabelas com o driver DataStax Cassandra C#:

Conecte-se ao seu cluster:

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

vou criar um List<String> e use uma instrução preparada (porque é apenas uma boa ideia) para vincular o nome do seu keyspace.Minha instrução CQL está apenas selecionando columnfamily_name, que deve ser o que você precisa.

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");

Agora executarei a instrução, percorrerei os resultados e adicionarei cada nome de tabela à lista que criei acima.

RowSet results = session.Execute(boundStatement);

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

Agora você deve ter uma lista de tabelas que pode adicionar à sua IU.

Outras dicas

Você pode correr:

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

Ele é executado no keyspace do "sistema".

  1. Pegar nomes de colunas:

    SELECT column_name FROM system.schema_columns WHERE keyspace_name = 'KeySpaceName' AND columnfamily_name = 'TableName';
    
  2. Pegar nomes de famílias de colunas, ou seja, nomes de tabelas:

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

Também existe a opção de usar metadados de cluster para obter uma listagem de strings de espaços-chave como este

var cluster = Cluster.Builder().AddContactPoints("IPAddress").Build();
var keyspaces = cluster.Metadata.GetKeyspaces();
foreach (var keyspaceName in keyspaces)
{
   Console.WriteLine(keyspaceName);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top