web-dev-qa-db-fra.com

Comment lister toutes les tables de cassandra

Il y a beaucoup de tables dans la base de données cassandra, qui contiennent la colonne intitulée user_id. Les valeurs user_id sont référées à l'utilisateur stocké dans les utilisateurs de la table. Certains utilisateurs étant supprimés, j'aimerais supprimer les enregistrements Orphan dans toutes les tables contenant la colonne intitulée user_id.

Existe-t-il un moyen de répertorier toutes les tables à l'aide de CassandraSQLContext ou de toute autre méthode intégrée ou procédure personnalisée afin d'éviter de définir explicitement la liste des tables?

Je vous remercie.

8
Niko Gamulin

Il existe des tables système pouvant fournir des informations sur les espaces clés, les tables et les colonnes stockés.

Essayez d’exécuter les commandes suivantes dans la console cqlsh:

  1. Obtenir des informations sur les espaces clés

    SELECT * FROM system.schema_keyspaces ;

  2. Obtenir des informations sur les tables

    SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name = 'keyspace name';

  3. Obtenir des informations sur la table

    SELECT column_name, type, validator FROM system.schema_columns WHERE keyspace_name = 'keyspace name' AND columnfamily_name = 'table name';

Sinse v 5.0.x Docs

  1. Obtenir des informations sur les espaces clés

    SELECT * FROM system.schema_keyspaces;

  2. Obtenir des informations sur les tables

    SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';

  3. Obtenir des informations sur la table

    SELECT * FROM system_schema.columns WHERE keyspace_name = 'keyspace_name' AND table_name = 'table_name';

Sinse v 6.0 Docs

  1. Obtenir des informations sur les espaces clés

    SELECT * FROM system_schema.keyspaces

  2. Obtenir des informations sur les tables

    SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';

  3. Obtenir des informations sur la table

    SELECT * FROM system_schema.columns WHERE keyspace_name = 'keyspace_name' AND table_name = 'table_name';

11
Sabik

De cqlsh exécuter describe tables;

13
Dan Borza

Vous pouvez réaliser ce que vous voulez en utilisant les métadonnées du pilote principal et du cluster datastax. Voici un exemple qui listera toutes les tables de votre espace de clés et les colonnes de chaque table:

 Cluster cluster= Cluster.builder().addContactPoint(clusterIp).build();
    Metadata metadata =cluster.getMetadata();

   Collection<TableMetadata> tablesMetadata= metadata.getKeyspace("mykeyspacename").getTables();
    for(TableMetadata tm:tablesMetadata){
        System.out.println("Table name:"+tm.getName());
        Collection<ColumnMetadata> columnsMetadata=tm.getColumns();            
        for(ColumnMetadata cm:columnsMetadata){
            String columnName=cm.getName();
            System.out.println("Column name:"+columnName);
        }
    }
5
zoran jeremic

Pour DSE. Si vous publiez plus tard, vérifiez l'espace-clé system_schema. de 

cqlsh > desc keyspaces;

spark_system  system_schema  "OpsCenter"  cfs_archive         "HiveMetaStore"
system_auth    cfs          demobeta            dsefs          
dse_security  hypermedia     dse_leases   system_traces       dse_perf       
solr_admin    system         system_distributed  dse_system

si vous voyez 'system_schema', les métadonnées des tables se trouvent dans cet espace de clés. 

cqlsh>use system_schema;

cqlsh>select keyspace_name,table_name from tables where keyspace_name = 'system';
0
mipsbuster