【发布时间】:2015-11-21 04:38:37
【问题描述】:
用例是我们将数据从一个列族迁移到另一个列族,因此需要验证目标列族与源列族具有完全相同的数据。这意味着这些 CF 的差异将是空的,即没有区别。那么,有没有办法实现这样的差异呢?
【问题讨论】:
标签: cassandra cql datastax cqlsh
用例是我们将数据从一个列族迁移到另一个列族,因此需要验证目标列族与源列族具有完全相同的数据。这意味着这些 CF 的差异将是空的,即没有区别。那么,有没有办法实现这样的差异呢?
【问题讨论】:
标签: cassandra cql datastax cqlsh
如果您的表不是太大,您可以将表内容导出到两个表的 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 中,您可以编写一个应用程序,对第一个表和每一行进行分页,读取第二个表中的相应键并比较它们。然后通过翻阅第二个表并读取第一个表中的相应键来重复该操作。当然,编写这样的应用程序需要更多的工作。
【讨论】:
我会考虑使用 sstable2json 实用程序将每个表导出到磁盘,然后对两个表的导出 json 使用标准 linux diff 命令。
sstable2json 的文档: http://docs.datastax.com/en/cassandra/1.2/cassandra/tools/toolsSStable2json_t.html
【讨论】: