Ich habe zwei Tabellen A
und B
, wo B
ist riesig (20 Millionen von 300) und A
ist von mittlerer Größe (300k von 10). A
enthält eine Spalte, die Adresse ist und B
3 Spalten enthält, die zu einer richtigen Adresse zusammengefügt werden können. Zum Beispiel in A
könnte die Adressspalte sein:Join Tabelle durch String-Matching in Hive oder Impala oder Pig
id | Address
-----------
233 | 123 Main St
und in B
konnten wir haben:
Number | Street_name | Street_suffix | Tax
------------------------------------------------
123 | Main | Street | 320.2
Ich möchte sie verbinden Zeichenfolge mit ähnlichen passend zu LIKE
mit etwas wie folgt aus:
select A.id, B.Tax
from A
left join B
on A.Address **contains** B.Number
and A.Address **contains** B.Street_name;
Grundsätzlich versuche ich sagen, dass die Datensätze übereinstimmen, wenn A
‚s-Adresse enthält B
's Nummer und street_name, dann sage ich, dass sie die gleiche Adresse sind (In Wirklichkeit habe ich auch Stadt, Staat und Postleitzahl. Aber ich entschied mich, diese zur Veranschaulichung zu ignorieren).
Die 2 enthält Teil ist etwas, ich bin mir nicht sicher, wie zu implementieren. Irgendwelche Ideen?
Ich bin auf Cloudera Hue Hadoop Verteilung, wo ich Zugang zu Hive (1.1.0, leider weil 1.2.0 hat Levenshtein Abstand Funktion), Impala (v2.3.0) und Pig (0.12.0-cdh5.5.0).