cassandra数据库中有许多表,其中包含标题为user_id的列。值user_id被引用到存储在表用户中的用户。由于某些用户被删除,我想删除包含标题为user_id的列的所有表中的孤立记录。
有没有办法使用CassandraSQLContext或任何其他内置方法或自定义过程列出所有表,以避免显式定义表列表?
谢谢。
答案 0 :(得分:22)
从cqlsh
执行describe tables;
答案 1 :(得分:13)
有系统表可以提供有关存储的键空间,表,列的信息。
尝试在cqlsh控制台中运行以下命令:
获取密钥空间信息
SELECT * FROM system.schema_keyspaces ;
获取表格信息
SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name = 'keyspace name';
获取表格信息
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
获取密钥空间信息
SELECT * FROM system.schema_keyspaces;
获取表格信息
SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';
获取表格信息
SELECT * FROM system_schema.columns
WHERE keyspace_name = 'keyspace_name' AND table_name = 'table_name';
Sinse v 6.0 Docs
获取密钥空间信息
SELECT * FROM system_schema.keyspaces
获取表格信息
SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';
获取表格信息
SELECT * FROM system_schema.columns
WHERE keyspace_name = 'keyspace_name' AND table_name = 'table_name';
答案 2 :(得分:5)
您可以使用datastax核心驱动程序和群集元数据实现您的目标。下面是一个示例,它将列出键空间中的所有表和每个表中的列:
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);
}
}
答案 3 :(得分:2)
要列出所有表(仅表名),
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css">
<table>
<tbody>
<tr>
<td><span class="bl-status">listed</span> Apple</td>
</tr>
<tr>
<td><span class="bl-status">not_listed</span> Guava</td>
</tr>
<tr>
<td><span class="bl-status">not_listed</span> Banana</td>
</tr>
<tr>
<td><span class="bl-status">listed</span> Grape</td>
</tr>
<tr>
<td><span class="bl-status">not_listed</span> Orange</td>
</tr>
<tr>
<td><span class="bl-status">listed</span> Mango</td>
</tr>
</tbody>
</table>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
要列出所有表和模式(CQL创建语句),
DESC tables;
,而DESC {$KEYSPACE_NAME}
是键空间的名称。
我正在使用从官方网站下载的Apache Cassandra 3.11.4二进制软件包:
{$KEYSPACE_NAME}
Apache Cassandra的CQL参考在这里:https://cassandra.apache.org/doc/cql3/CQL-3.0.html
答案 4 :(得分:2)
desc keyspaces; // list all databases/collections names
use anyKeyspace; // select any database
desc tables; // list all tables in collection/ database
答案 5 :(得分:1)
对于DSE。如果以后发布,请检查system_schema键空间。 来自
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
如果看到“ system_schema”,则表的元数据在此键空间中。
cqlsh>use system_schema;
cqlsh>select keyspace_name,table_name from tables where keyspace_name = 'system';
答案 6 :(得分:1)
尝试运行以下查询:
cqlsh> describe keyspace <keyspace_name>;
答案 7 :(得分:0)
只需连接CQLSH并尝试以下命令
描述表格;或
DESC SCHEMA;
您还可以“描述键空间;”和“使用键空间”;您想在其中看到带有“描述表”的表的地方