【发布时间】:2016-12-09 04:11:28
【问题描述】:
我有两个表 A 和 B,其中 B 很大(2000 万乘 300),A 大小适中(300k x 10)。 A 包含一列地址,B 包含 3 列,可以将它们放在一起形成正确的街道地址。例如,A 中的地址列可以是:
id | Address
-----------
233 | 123 Main St
在B 中我们可以:
Number | Street_name | Street_suffix | Tax
------------------------------------------------
123 | Main | Street | 320.2
我想使用类似于LIKE 的字符串匹配加入它们,如下所示:
select A.id, B.Tax
from A
left join B
on A.Address **contains** B.Number
and A.Address **contains** B.Street_name;
基本上我试图通过说如果A 的地址包含B 的号码和街道名称来匹配记录,那么我说它们是相同的地址(实际上,我也有城市、州和邮政编码。但出于说明目的,我选择忽略这些)。
2 contains 部分是我不知道如何实现的东西。有什么想法吗?
我在 Cloudera 的 Hue Hadoop 发行版上,在那里我可以访问 Hive(1.1.0,不幸的是因为 1.2.0 具有 Levenshtein 距离函数)、Impala (v2.3.0) 和 Pig (0.12.0-cdh5.5.0) .
【问题讨论】:
标签: sql hadoop hive apache-pig impala