有没有办法在Cassandra中获得存储在2个列族中的数据差异?

时间:2015-08-26 23:48:52

标签: cassandra cql datastax cqlsh

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

2 个答案:

答案 0 :(得分:1)

如果您的表格不是太大,您可以将表格内容导出到两个表格的csv文件中,对csv文件进行排序,然后对已排序的文件进行差异处理。

您可以使用copy命令在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中,您可以编写一个应用程序,该页面遍历第一个表格,并且对于每一行,读取第二个表格中的相应密钥并进行比较。然后通过在第二个表中进行分页并读取第一个表中的相应键来重复此操作。那当然是编写这样一个应用程序的更多工作。

答案 1 :(得分:0)

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

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

相关问题