Cassandra CQL3.2:是否删除具有特定前缀的表?

Cassandra CQL3.2:是否删除具有特定前缀的表?,cassandra,cql,prefix,Cassandra,Cql,Prefix,我有一个Cassandra 2.1.8数据库,其中包含一组表,所有表的形式都是“prefix1_tablename”或“prefix2_tablename” 我想删除每一个以前缀x1_uu开头的表,而不处理其他任何内容 我知道我可以使用查询获取表名: SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name='mykeyspace' 我考虑以某种方式过滤结果,只得到prefix1_uuu表,将它

我有一个Cassandra 2.1.8数据库,其中包含一组表,所有表的形式都是“prefix1_tablename”或“prefix2_tablename”

我想删除每一个以前缀x1_uu开头的表,而不处理其他任何内容

我知道我可以使用查询获取表名:

SELECT columnfamily_name FROM system.schema_columnfamilies
WHERE keyspace_name='mykeyspace'
我考虑以某种方式过滤结果,只得到prefix1_uuu表,将它们放入一个表中,每个表前面都有DROP table,然后执行新表中的所有语句。这与我见过的用MySQL或Oracle解决相同问题的人的策略类似

但是,在CQL3.2中,我无法访问用户定义的函数(至少根据我阅读的文档…),我不知道如何执行表查询结果中的语句,甚至不知道如何过滤Cassandra中没有类似运算符的prefix1_uuu表


有没有办法做到这一点?

我想出了一个Bash shell脚本来解决我自己的问题。一旦我意识到我可以将列族表导出到CSV文件中,使用grep和awk执行过滤和文本操作对我来说就更有意义了,而不是寻找“纯”cqlsh方法

我使用的脚本:

#!/bin/bash

# No need for a USE command by making delimiter a period
cqlsh -e "COPY system.schema_columnfamilies (keyspace_name, columnfamily_name) 
TO 'alltables.csv' WITH DELIMITER = '.';"

cat alltables.csv | grep -e '^mykeyspace.prefix1_' \
    | awk '{print "DROP TABLE " $0 ";"}' >> remove_prefix1.cql

cqlsh -f 'remove_prefix1.cql'

rm alltables.csv remove_prefix1.cql
干得好!这是A)棒极了,B)正是我要建议的。