Je suis en train de faire correspondre les numéros de téléphone à une zone en utilisant Ruche. J'ai une table (PREFMAP) qui associe un préfixe du numéro (préfixe) dans une zone (zone) et une autre table (utilisateurs) avec une liste de numéros de téléphone (nb). Il y a seulement 1 correspondance par numéro de téléphone (pas de sous-région)2 tables à Hive en utilisant un numéro de téléphone et un préfixe (longueur variable)
Le problème est que la longueur des préfixes ne fixe donc je ne peux pas utiliser la fonction UDF substr (nb, « la longueur du préfixe ») dans les JOIN de ON() condition pour faire correspondre la sous-chaîne d'un nombre à un préfixe.
Et quand je tente d'utiliser instr() pour trouver si un numéro a un préfixe correspondant:
SELECT users.nb,prefix.area
FROM users
LEFT OUTER JOIN prefix
ON (instr(prefmap.prefix,users.nb)=1)
je reçois une erreur sur line4 « Les deux gauche et alias droite rencontrés Rejoindre « 1 »)
Comment pourrais-je obtenir ce travail J'utilise la ruche 0.9 Merci pour tout conseil
Malheureusement, je pense que c'est une meilleure solution pour ce cas, car tous les matchs doivent être essayés avec l'udf afin de tester l'égalité et de rejeter –
Je prends cela, il semble que cela puisse être fait, écrire un udf personnalisé, qui prend vos 2 entrées, par exemple customudf (users.nb, prefmap.prefix), effectue votre comparaison instr (users.nb, prefmap.prefix) = 1 et renvoie true. Réponse a été trouvée ici: http://stackoverflow.com/questions/18039235/joining-two-tables-on-a-udf-in-hive –