我正在尝试比较hbase中的两个不同表,以便能够自动验证用于在hbase中移动数据的一些etl过程。在hbase中比较两个表的最佳方法是什么?我的用例如下:我要做的是创建一个表作为我的预期输出。这个表将包含我期望通过对输入文件执行teams代码来创建的所有数据。然后,我将获取实际输出表和预期输出表之间的差异,以验证被测组件的完整性。
pjngdqdw1#
我知道这个问题有点老了,但是table有多大?如果它们都能放入内存,您可以使用hbastorage将它们加载到pig中,然后使用pig的内置diff函数来比较生成的包。根据文档,即使对于不适合内存的大型表,这种方法也能起作用,但是速度会非常慢。
qlckcl4x2#
我不知道任何现成的东西,但你可以写一个多表Map/减少。Map程序只会从每个表中发出键(一个值是所有hbase键值加上一个表名),reducer可以确保每个键有2条记录并比较键值。当只有一个键时,它可以看到哪个表不同步
cqoc49vn3#
dataset1 = LOAD '/path/to/dataset1' USING PigStorage('<your delimiter>') AS (a:chararray, b:chararray, c:chararray, d:chararray); dataset2 = LOAD '/path/to/dataset2' USING PigStorage('<your delimiter>') AS (a:chararray, b:chararray, c:chararray, d:chararray); dataset3 = COGROUP dataset1 BY (a, b,c, d), dataset2 BY (a, b, c, d); dataset4 = FOREACH dataset3 GENERATE DIFF(dataset1,dataset2);
3条答案
按热度按时间pjngdqdw1#
我知道这个问题有点老了,但是table有多大?如果它们都能放入内存,您可以使用hbastorage将它们加载到pig中,然后使用pig的内置diff函数来比较生成的包。
根据文档,即使对于不适合内存的大型表,这种方法也能起作用,但是速度会非常慢。
qlckcl4x2#
我不知道任何现成的东西,但你可以写一个多表Map/减少。
Map程序只会从每个表中发出键(一个值是所有hbase键值加上一个表名),reducer可以确保每个键有2条记录并比较键值。当只有一个键时,它可以看到哪个表不同步
cqoc49vn3#