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.
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:
Obtenir des informations sur les espaces clés
SELECT * FROM system.schema_keyspaces ;
Obtenir des informations sur les tables
SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name = 'keyspace name';
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
Obtenir des informations sur les espaces clés
SELECT * FROM system.schema_keyspaces;
Obtenir des informations sur les tables
SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';
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
Obtenir des informations sur les espaces clés
SELECT * FROM system_schema.keyspaces
Obtenir des informations sur les tables
SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';
Obtenir des informations sur la table
SELECT * FROM system_schema.columns
WHERE keyspace_name = 'keyspace_name' AND table_name = 'table_name';
De cqlsh
exécuter describe tables;
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);
}
}
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';