2015-11-10 9 views
0

utilisant: Apache DrillConversion de chaînes de CSV à plusieurs colonnes dans Drill Apache

Je suis en train d'apporter les données suivantes sous une forme plus structurée:

"apple","juice", "box:12,shipment_id:143,pallet:B12" 
"mango", "pulp", "box:7,shipment_id:133,pallet:B19,route:11" 
"grape", "jam", "box:10" 

sortie souhaitée:

fruit, product, box_id, shipment_id, pallet_id, route_id 
apple,juice, 12, 143, B12, null 
mango, pulp, 7, 133, B19, 11 
grape, jam, 10, null, null, null 

Le jeu de données s'exécute en deux Go. Drill lit l'entrée dans trois colonnes avec la dernière chaîne dans une seule colonne. Avoir réussi la sortie désirée en effectuant des opérations de manipulation de chaînes (REGEXP_REPLACE et CONCAT) sur la dernière colonne, puis en lisant la colonne comme json (CONVERT_FROM), et finalement en séparant différentes colonnes en utilisant KVGEN et FLATTEN.

Le temps d'exécution est assez élevé en raison des fonctions regex. Est-ce qu'il y a une meilleure approche? (PS: le temps d'exécution est comparé à l'utilisation d'un travail pyspark pour obtenir la sortie souhaitée).

Répondre

0

je ne vois pas une autre façon de le faire à 100% avec Drill Apache, sans stockage intermédiaire

Vous pouvez essayer avec une fonction personnalisée en Java, pour le rendre plus facile à écrire.

Depuis que vous avez effectué le travail, avez-vous essayé d'enregistrer les données dans un fichier Parquet? Commande CTAS: http://drill.apache.org/docs/create-table-as-ctas-command/

Ceci rendrait les requêtes suivantes beaucoup plus rapides.