Données complexes dans Hive

Hive présente un gros intérêt dans le fait de pouvoir utiliser SQL pour exprimer des requêtes sur les données présentes dans Hadoop. Cependant SQL a été conçu pour traiter exclusivement des données tabulaires organisées en rangs et colonnes. Imaginons des logs mentionnant des clients et des produits associé à chacun de ses clients. On est susceptible d'avoir des données de la forme CLIENTx : PRODUITn, PRODUITm, PRODUITo, tout comme d'autres lignes avec tout autre nombre de produits... L'approche classique SQL consisterait à séparer les clients des produits pour les mettre dans des tables distinctes, et ensuite faire des jointures pour obtenir des enregistrements de la forme 1 client : 1 produit.

Heureusement HIVE arrive avec quelques expressions permettant de définir ce type de complexités dans les structures de données et faire des requêtes de projection avec ces données. Dans la création de Table HIVE on peut préciser que certains champs sont de type ARRAY, et quels sont les séparateurs de valeurs dans ces champs :

De même pour les requêtes on peut grâce à une instruction LATERAL VIEW projeter les données hors de la table d'origine. Le tableau de valeur est éclaté en n lignes afin de disposer des couples client:produit attendus :

Quelques explications en  video sur tout ça :