2 votes

Diviser un fichier csv par la valeur d'une colonne - Apache Nifi

J'ai un fichier csv, qui a la structure suivante.

ERP,J,JACKSON,8388 SOUTH CALIFORNIA ST.,TUCSON,AZ,85708,267-3352,,ALLENTON,MI,48002,810,710-0470,369-98-6555,462-11-4610,1953-05-00,F,
MARKETING,J,JACKSON,8388 SOUTH CALIFORNIA ST.,TUCSON,AZ,85708,267-3352,,ALLENTON,MI,48002,810,710-0470,369-98-6555,462-11-4610,1953-05-00,F,

Comme vous pouvez le voir, il n'y a pas d'en-tête, mais pour votre information, la première partie (première colonne) représente le secteur où les données sont obtenues.

Ce que je dois faire, c'est qu'en fonction de la valeur de la première colonne, par exemple (MARKETING ou ERP), je dois envoyer toutes ces lignes vers un répertoire de sortie différent.

Par exemple, toutes les lignes avec ERP dans /output/ERP/ toutes les lignes avec MARKETING vers /output/marketing/

J'ai une idée sur la façon de le faire, mais mon problème concerne le processeur RouteOnAttribute que j'utilise, je ne sais pas comment faire référence à la première colonne et indiquer quelle est la valeur (ERP ou MARKETING) pour l'envoyer ensuite au bon répertoire de sortie.

Voici mon schéma.

enter image description here

Merci.

5voto

Shu Points 8097

Utilice PartitionRecord processeur pour ce cas.

Configurez le processeur avec record reader/writer controller services . Même si vous n'avez pas d'en-tête, vous pouvez utiliser col1, col2...etc dans le schéma avro.

  • ajouter une nouvelle propriété qui définit le processeur à utiliser ce champ pour partitionner le fichier de flux.

Maintenant, le processeur d'enregistrement de partition ajoute le partition field attribute avec une valeur, en utilisant la valeur de cet attribut nous pouvons dynamically store files dans des répertoires respectés de manière dynamique.

Flux :

1.GetFile
2.PartitionRecord
3.PutFile //configure directory as /output/${<keep_partition_field_name_here>}

Veuillez vous référer à ce lien pour configurer l'utilisation du processeur d'enregistrement des partitions.

(ou)

Ancienne approche :

Utilisation de RouteText au lieu de SplitText + RouteOnAttribute Processeurs

Configurer le processeur RouteText comme

enter image description here

Utilisez le ERP/MARKETING se connectent au processeur PutFile et utilisent RouteText.Route pour enregistrer dynamiquement les fichiers dans des répertoires.

Flux :

1.GetFile
2.RouteText
3.PutFile //configure directory as /output/${RouteText.Route}/

Vous pouvez également utiliser Groupe Expression régulière pour créer des partitions.

Note

Utilisation de Le processeur PartitionRecord sera plus efficace que le processeur RouteText.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X