【问题标题】:CQL3.2: DROP TABLE with certain prefix?CQL3.2:带有特定前缀的 DROP TABLE?
【发布时间】:2015-08-14 03:16:50
【问题描述】:

我有一个 Cassandra 2.1.8 数据库,其中包含一堆表,全部采用“prefix1_tablename”或“prefix2_tablename”的形式。

我想删除以 prefix1_ 开头的每个表,而别管其他任何东西。

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

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

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

虽然使用 CQL3.2,但我无法访问用户定义函数(至少根据我读过的文档...),而且我不知道如何执行诸如执行语句之类的事情一个表查询结果,以及如何在 Cassandra 中过滤掉没有 LIKE 运算符的 prefix1_ 表。

有没有办法做到这一点?

【问题讨论】:

    标签: cassandra cql prefix


    【解决方案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
    

    【讨论】:

    • 干得好!那是 A) 太棒了,B) 正是我要建议的。
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多