CQL3.2:使用特定前缀删除 TABLE?

CQL3.2: DROP TABLE with certain prefix?

我有一个 Cassandra 2.1.8 数据库,其中包含一堆 table,所有形式都是 "prefix1_tablename" 或 "prefix2_tablename"。

我想删除所有以 prefix1_ 开头的 table,并保留其他任何内容。

我知道我可以使用查询获取 table 个名字:

SELECT columnfamily_name FROM system.schema_columnfamilies
WHERE keyspace_name='mykeyspace'

我考虑过以某种方式过滤结果以仅获取 prefix1_ tables,将它们放入 table 中,并在每个结果前加上 DROP TABLE,然后执行所有语句在我的新 table 中。这与我看到人们使用 MySQL 或 Oracle 解决相同问题的策略类似。

尽管使用 CQL3.2,我无法访问用户定义的函数(至少根据我读过的文档...)并且我不知道如何执行诸如执行语句之类的操作table 查询结果,以及如何在 Cassandra 中过滤掉没有 LIKE 运算符的 prefix1_ tables。

有没有办法做到这一点?

我想出了一个 Bash shell 脚本来解决我自己的问题。当我意识到我可以将列族 table 导出到 CSV 文件时,与查找 'pure' cqlsh 方法相比,使用 grep 和 awk 执行过滤和文本操作对我来说更有意义。

我使用的脚本:

#!/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 " [=10=] ";"}' >> remove_prefix1.cql

cqlsh -f 'remove_prefix1.cql'

rm alltables.csv remove_prefix1.cql