hive 配置单元中的字符串匹配

u3r8eeie  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(228)

我有两个表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上连接这两个表,并显示哪些记录具有可能的匹配。

1qczuiv0

1qczuiv01#

由于字符串值的差异,常规的JOIN无法解决您的问题。您的第一个选择是将T1中的每条记录与T2中的每条记录进行比较。这将创建笛卡尔积,如果您不注意数据的分布方式和集群的设置方式,则可能会消耗大量资源
我首先会再次检查您的配置单元设置是否为:
set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;
Hive有一个名为levenshtein的字符串比较函数,您需要熟悉一下,在您认为它们“相同”之前,您必须创建一个截止值,以确定它们需要多么接近。
一种常见的改进方法是将Levenshtein距离除以最长字符串的长度,将其表示为百分比。
但基本上,

  1. SELECT T1.C1, T2.C2
  2. FROM (SELECT DISTINCT C1 FROM T1) T1,
  3. (SELECT DISTINCT C2 FROM T2) T2
  4. WHERE levenshtein(T1.C1, T2.C2) <= 4

在那里你可以调整4向上和向下,以自定义如何严格的匹配将。
我强烈建议您将比对储存在实际执行数据表中,这样您只会执行一次这种类型的比对。如果您同意,您可以储存它并将记录永久链接在一起,这样您就不需要重做这个练习。

相关问题