如何比较Hive和Teradata之间相同的表

2024-10-03 13:16:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我们将相同的表复制到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来实现这一点。你知道吗


Tags: csv方法inaswithlineopenoutfile
1条回答
网友
1楼 · 发布于 2024-10-03 13:16:44

要进行比较,必须始终将两个表的数据放在同一位置。你知道吗

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>;。该查询应返回一个空行集。你知道吗

祝你好运-

相关问题 更多 >