我有一个带有一堆表的Cassandra 2.1.8数据库,所有表格都是“prefix1_tablename”或“prefix2_tablename”。
我想DROP每个以prefix1_开头的表,并留下其他任何东西。
我知道我可以使用查询来获取表名:
SELECT columnfamily_name FROM system.schema_columnfamilies
WHERE keyspace_name='mykeyspace'
我想过以某种方式过滤结果只得到prefix1_表,把它们放到一个表中,每个表都有DROP TABLE,然后执行我新表中的所有语句。这与我在人们用MySQL或Oracle解决同样问题时看到的策略类似。
但是使用CQL3.2,我无法访问用户定义的函数(至少根据我读过的文档...)而且我不知道如何执行类似于执行语句的操作表查询结果,以及如何在Cassandra中过滤掉没有LIKE运算符的prefix1_表。
有没有办法实现这个目标?
答案 0 :(得分:1)
我想出了一个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