【问题标题】:Is there a way to get a diff of data stored in 2 column families in Cassandra?有没有办法获取存储在 Cassandra 的 2 个列族中的数据差异?
【发布时间】:2015-11-21 04:38:37
【问题描述】:

用例是我们将数据从一个列族迁移到另一个列族,因此需要验证目标列族与源列族具有完全相同的数据。这意味着这些 CF 的差异将是空的,即没有区别。那么,有没有办法实现这样的差异呢?

【问题讨论】:

    标签: cassandra cql datastax cqlsh


    【解决方案1】:

    如果您的表不是太大,您可以将表内容导出到两个表的 csv 文件,对 csv 文件进行排序,然后对排序后的文件进行比较。

    您可以使用复制命令指定您感兴趣的列以及您希望它们在 csv 文件中的顺序,例如:

    cqlsh> COPY table1 (old_col1, old_col2, old_col3) TO 'table1.csv';
    cqlsh> COPY table2 (new_col1, new_col2, new_col3) TO 'table2.csv';
    
    diff <(sort table1.csv) <(sort table2.csv)
    

    如果表很大并且两个表同时在 Cassandra 中,您可以编写一个应用程序,对第一个表和每一行进行分页,读取第二个表中的相应键并比较它们。然后通过翻阅第二个表并读取第一个表中的相应键来重复该操作。当然,编写这样的应用程序需要更多的工作。

    【讨论】:

    • 期待任何可用的实用程序/第三方工具,例如 sqldiff 等 SQL 表。肯定已经想到了上述解决方案,但是是的,而且正如也提到的,在大数据的情况下并没有太大帮助。
    • 我还没有看到任何第三方工具,但也许有人会加入其中。否则你可能需要自己去创造一些东西。
    【解决方案2】:

    我会考虑使用 sstable2json 实用程序将每个表导出到磁盘,然后对两个表的导出 json 使用标准 linux diff 命令。

    sstable2json 的文档: http://docs.datastax.com/en/cassandra/1.2/cassandra/tools/toolsSStable2json_t.html

    【讨论】:

    • 这肯定有用。谢谢克里斯。
    猜你喜欢
    • 2011-01-26
    • 2020-02-21
    • 2021-05-09
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2014-02-27
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多