我有两个表T1和T2。T1的列C1中包含所有字符串值,同样,T2的列C2中包含所有字符串值。C2中的数据是精确/完整的,C1中的数据与C1中的数据大致匹配。如何比较这两个字符串列。示例:在T1表中,**C1每行都有这些值-**ArryGr BakerMem SummitHe
在T2中,**C2的每一行都有这些值-**ArryGrade面包机内存SummitHealth
字段C1和C2具有相同的数据,但是输入到这两个表中的数据不同。现在,我如何比较hive中两个不同表的这两个字符串列?我需要在T1.C1=T2.C2上连接这两个表,并显示哪些记录具有可能的匹配。
1条答案
按热度按时间1qczuiv01#
由于字符串值的差异,常规的
JOIN
无法解决您的问题。您的第一个选择是将T1中的每条记录与T2中的每条记录进行比较。这将创建笛卡尔积,如果您不注意数据的分布方式和集群的设置方式,则可能会消耗大量资源。我首先会再次检查您的配置单元设置是否为:
set hive.vectorized.execution.enabled = true;
个set hive.vectorized.execution.reduce.enabled = true;
Hive有一个名为
levenshtein
的字符串比较函数,您需要熟悉一下,在您认为它们“相同”之前,您必须创建一个截止值,以确定它们需要多么接近。一种常见的改进方法是将Levenshtein距离除以最长字符串的长度,将其表示为百分比。
但基本上,
在那里你可以调整4向上和向下,以自定义如何严格的匹配将。
我强烈建议您将比对储存在实际执行数据表中,这样您只会执行一次这种类型的比对。如果您同意,您可以储存它并将记录永久链接在一起,这样您就不需要重做这个练习。