CQL3.2:具有特定前缀的DROP TABLE?

时间:2015-08-13 18:33:22

标签: cassandra cql prefix

我有一个带有一堆表的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_表。

有没有办法实现这个目标?

1 个答案:

答案 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