如何在hive和teradata之间比较同一个表

kjthegm6  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(641)

我们将相同的表复制到hive、teradata和vertica。
我们必须测试并确认这些表是否在所有表之间完全复制。
到目前为止,我们使用python将表下载到csv并进行比较,但是由于表的大小,我们发现这种方法存在困难。

with open('hive.csv', 'r') as t1, open('teradat.csv', 'r') as t2:
    hivedata = t1.readlines()
    teradata = t2.readlines()

with open('differences.csv', 'w') as outFile:
    for line in teradata:
        if line not in hivedata:
            outFile.write(line)

有人能提出在给定时间比较任意两个表的最佳方法吗。
我可以使用python,spark/pyspark来实现这一点。

4ngedf3f

4ngedf3f1#

要进行比较,必须始终将两个表的数据放在同一位置。
python方法将两个数据库中的所有数据带到第三个位置,这是最慢的方法。
最好的办法是让所有相关人员都同意计算一个数字散列值,在所有hive、teradata和vertica中,该散列值将返回完全相同的整数和完全相同的表行数据。对每个平台上每个表上的所有哈希值求和,并在所有地方得到相同的结果,就足以表明数据是相同的。然而,有人可能会争辩说,您可能会遇到哈希冲突,因此这不是绝对准确的(即使哈希冲突的风险非常非常低)。
如果必须比较实际的表数据,请只将一个表的数据传递到另一个数据库。在vertica(可能是最好的镜头,因为它可以在这种类型的操作中表现得相当出色), CREATE TABLE cmp_<table_name> LIKE <table_name>; ,然后找到最快的方法将数据从其他数据库传输到vertica。在单个线程中导出到csv通常不是最快的。考虑几个并行作业,每个作业处理表数据的子集。考虑一下并行处理的程序,读入内存并使用内存在非常大的数组中用参数标记填充insert。最后, SELECT * FROM <table_name> EXCEPT SELECT * FROM cmp_<table_name>; . 该查询应返回一个空行集。
祝你好运-

相关问题