Scala 如何列出所有cassandra表
cassandra数据库中有许多表,其中包含标题为user_id的列。user_id的值是指存储在user表中的user。由于删除了一些用户,我想删除所有表中包含标题为user_id的列的孤立记录Scala 如何列出所有cassandra表,scala,apache-spark,cassandra,spark-cassandra-connector,Scala,Apache Spark,Cassandra,Spark Cassandra Connector,cassandra数据库中有许多表,其中包含标题为user_id的列。user_id的值是指存储在user表中的user。由于删除了一些用户,我想删除所有表中包含标题为user_id的列的孤立记录 是否有一种方法可以使用CassandraSQLContext或任何其他内置方法或自定义过程列出所有表,以避免显式定义表列表?有一些系统表可以提供有关存储的键空间、表和列的信息 在cqlsh控制台中尝试运行以下命令: 获取密钥空间信息 从system.schema_键空间中选择* 获取表格信息 从sy
是否有一种方法可以使用CassandraSQLContext或任何其他内置方法或自定义过程列出所有表,以避免显式定义表列表?有一些系统表可以提供有关存储的键空间、表和列的信息 在cqlsh控制台中尝试运行以下命令:
从system.schema_键空间中选择*代码>
从system.schema_columnfamilies中选择columnfamily_name,其中keyspace_name='keyspace name'代码>
从system.schema_列中选择列_名称、类型、验证器,其中keyspace_名称='keyspace name'和columnfamily_名称='table name'代码>
从system_schema.keyspace中选择*代码>
SELECT*FROM system_schema.tables,其中keyspace_name='keyspace name'代码>
从system\u schema.columns中选择*
其中keyspace_name='keyspace_name'和table_name='table_name'代码>
SELECT*FROM system\u schema.keyspace
SELECT*FROM system_schema.tables,其中keyspace_name='keyspace name'代码>
从system\u schema.columns中选择*
其中keyspace_name='keyspace_name'和table_name='table_name'代码>
您可以使用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);
}
}
Cluster Cluster=Cluster.builder();
元数据=cluster.getMetadata();
Collection tableMetadata=metadata.getKeyspace(“mykeyspacename”).getTables();
for(TableMetadata tm:TableMetadata){
System.out.println(“表名:+tm.getName());
Collection columnsMetadata=tm.getColumns();
对于(columnsMetadata cm:columnsMetadata){
字符串columnName=cm.getName();
System.out.println(“列名:”+columnName);
}
}
来自cqlsh
执行描述表格。如果以后发布,请检查system_架构键空间。
从
如果看到“system_schema”,那么表的元数据就在这个键空间中
cqlsh>use system_schema;
cqlsh>select keyspace_name,table_name from tables where keyspace_name = 'system';
要列出所有表格(仅表格名称)
DESC表代码>
要列出所有表和模式(CQL创建语句)
DESC{$KEYSPACE\u NAME}
而{$KEYSPACE\u NAME}
是键空间的名称
我使用的是从官方网站下载的Apache Cassandra 3.11.4二进制软件包:
cql> show version;
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
Apache Cassandra的CQL参考如下:尝试运行以下查询:
cqlsh> describe keyspace <keyspace_name>;
只需连接CQLSH并尝试以下命令
描述表格;或
描述模式
还可以“描述键空间;”和“使用键空间;”您希望在其中查看带有“descripe tables;”的表 这是列出所有表的最新最简单的方法为了完整性,请运行use my_keyspace代码>首先。是否可以按字母顺序排列输出?对于我来说,请确保执行使用键空间\u name
否则您将获得所有键空间的结果。系统
键空间不是DSE特定的-它是一个核心Cassandra功能。。。Cassandra版本之间的模式表示不同,因此最好的方法是使用cqlsh
的描述键空间
,或者通过@zoran jeremicalex指出的元数据进行访问,这并不意味着系统键空间是特定于DSE的,但有些是。架构表已移出“系统”键空间,因此表系统键空间不再位于该键空间中。。这是针对DSE而非开源Cassandra的具体答案。仅引用了DSE的元数据。描述表;“发布”是获取表格列表的一种非常简单的方法。评论围绕DSE的元数据而非开源。如果您正在查找那些不在DSE中的系统表。如果试图在应用程序中生成表列表,有时无法运行desc,但需要运行cql…系统键空间是Cassandra特有的。您描述的差异是Cassandra2.x和3.x之间的差异(请参阅)。特定于DSE的键空间通常具有DSE
前缀,如DSE\u安全性,DSE\u租约
等(尽管cfs
和solr\u admin
不遵循此约定)。总的来说,如果您需要以编程方式访问此数据,那么最好使用支持元数据的驱动程序
——这与版本无关。对于我的cassandra版本[cqlsh 5.0.1 | cassandra 3.11.3 | CQL spec 3.4.4 |本机协议v4]
获取键空间信息可与选择*自系统\模式一起使用。键空间
以及获取表信息选择*自系统\模式。表中键空间\名称='键空间名称'
cqlsh:描述键空间;描述模式不是CQL命令,而是cqlsh
command…@AlexOtt是的,我的意思是在连接cqlsh之后。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
desc keyspaces; // list all databases/collections names
use anyKeyspace; // select any database
desc tables; // list all tables in collection/ database
desc keyspaces; // list all databases/collections names
use anyKeyspace; // select any database
desc tables; // list all tables in collection/ database