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

Is there a way to get a diff of data stored in 2 column families in Cassandra?

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

如果您的 table 不是太大,您可以将 table 内容导出到两个 table 的 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)

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

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

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