Principes de conception des pipelines

Cette page vous accompagne dans la conception de votre pipeline Google Cloud Dataflow. Vous y trouverez des informations indiquant comment déterminer la structure de votre pipeline, choisir les transformations à appliquer aux données et déterminer les méthodes d'entrée et de sortie appropriées.

Avant de lire cette section, il est recommandé de se familiariser avec la documentation du modèle de programmation Cloud Dataflow, y compris les pages relatives aux concepts de pipelines, de PCollections, de transformations et d'E/S de pipeline.

Éléments à prendre en considération lors de la conception de votre pipeline

Lorsque vous concevez un pipeline Cloud Dataflow, il convient de vous poser quelques questions élémentaires :

  • Où vos données d'entrée sont-elles stockées ? De combien d'ensembles de données disposez-vous ? Ces informations déterminent les types de transformations Read que vous devez appliquer au début de votre pipeline.
  • Comment vos données se présentent-elles ? Il peut s'agir, par exemple, de texte en clair, de fichiers journaux formatés ou de lignes d'une table BigQuery. Certaines transformations Dataflow fonctionnent exclusivement sur des collections PCollection de paires clé/valeur : vous devrez donc déterminer si vos données sont des données à clé et, le cas échéant, de quel type de clé il s'agit, puis décider de leur mode de représentation optimal dans la ou les collections PCollection de votre pipeline.
  • Que voulez-vous faire de vos données ? Dans la mesure où les transformations de base des SDK Dataflow sont à usage général, la façon dont vous avez besoin de modifier ou de manipuler vos données déterminera si des transformations de base comme ParDo suffisent ou s'il y a lieu de recourir à des transformations pré-écrites incluses dans les SDK Dataflow.
  • Comment vos données de sortie se présentent-elles et quelle est leur destination ? Ces informations déterminent les types de transformations Write que vous devez appliquer à la fin de votre pipeline.

Un pipeline basique

Les pipelines les plus simples représentent un flux d'opérations linéaire comme celui de la figure 1 ci-dessous :

Figure 1 : Pipeline linéaire

Cependant, votre pipeline peut être sensiblement plus complexe. Un pipeline représente un graphe acyclique dirigé d'étapes. Il peut avoir plusieurs sources d'entrée et plusieurs récepteurs de sortie, et ses opérations (transformations) peuvent générer plusieurs collections PCollection.

Différentes formes de pipeline

Les exemples suivants illustrent différentes formes possibles pour votre pipeline.

Collections PCollection à embranchement

Il est important de noter que les transformations ne consomment pas les collections PCollection, mais considèrent individuellement chaque élément d'une collection PCollection et produisent une nouvelle collection PCollection en sortie. Vous avez de ce fait la possibilité d'appliquer des opérations distinctes aux différents éléments d'une même collection PCollection.

Plusieurs transformations traitant la même collection PCollection

Vous pouvez utiliser une même collection PCollection comme entrée de plusieurs transformations sans consommer cette entrée ni la modifier.

Le pipeline illustré à la figure 2 ci-dessous lit en entrée des prénoms (chaînes) issus d'une source unique (Google BigQuery) et crée une collection PCollection composée de lignes BigQuery. Le pipeline applique ensuite plusieurs transformations à la même PCollection. La transformation A extrait tous les noms de cette collection PCollection qui commencent par la lettre "A", et la transformation B extrait tous les noms de cette collection PCollection commençant par la lettre "B". Les transformations A et B ont toutes deux la même collection PCollection d'entrée.

Figure 2 : Pipeline comportant plusieurs transformations. Notez que la collection PCollection constituée de lignes de table BigQuery est traitée par deux transformations.

Une transformation unique utilisant des sorties latérales

Une autre façon de créer une branche dans un pipeline consiste à diriger la sortie d'une transformation unique vers plusieurs collections PCollection au moyen de sorties latérales. Les transformations utilisant des sorties latérales permettent de traiter une seule fois chaque élément de l'entrée pour générer de zéro à plusieurs collections PCollection.

La figure 3 ci-dessous illustre le même exemple que précédemment, mais avec une transformation utilisant une sortie latérale. Les noms commençant par "A" sont ajoutés à la collection PCollection de sortie principale, et les noms commençant par "B" sont ajoutés à la collection PCollection de sortie latérale.

Figure 3 : Pipeline avec une transformation générant plusieurs collections PCollection

Le pipeline de la figure 2 contient deux transformations traitant les éléments issus d'une même collection PCollection d'entrée. La première transformation utilise le modèle logique suivant :

if (starts with 'A') { outputToPCollectionA }

tandis que la seconde transformation applique ce modèle logique :

if (starts with 'B') { outputToPCollectionB }

Comme chaque transformation lit la totalité de la collection PCollection d'entrée, chaque élément de cette collection PCollection d'entrée est traité deux fois.

Le pipeline de la figure 3 effectue la même opération d'une manière différente, à l'aide d'une seule transformation utilisant la logique suivante :

if (starts with 'A') { outputToPCollectionA } else if (starts with 'B') { outputToPCollectionB }

où chaque élément de la collection PCollection d'entrée est traité une seule fois.

Vous pouvez utiliser l'un ou l'autre mécanisme pour produire plusieurs collections PCollections de sortie. Cependant, l'utilisation de sorties latérales est plus opportune si la transformation requiert un temps de calcul par élément important.

Fusionner des collections PCollection

Après avoir ramifié une collection PCollection en plusieurs collections PCollection via différentes transformations, vous aurez souvent besoin de fusionner tout ou partie des collections PCollection résultantes. Vous disposez pour cela de deux méthodes :

  • Aplatir : la transformation Flatten du SDK Dataflow vous permet de fusionner plusieurs collections PCollection du même type.
  • Joindre : la transformation CoGroupByKey du SDK Dataflow permet d'effectuer une jointure relationnelle entre deux collections PCollection. Ces deux collections PCollection doivent être à clé (c'est-à-dire qu'il doit s'agir de collections de paires clé/valeur) et doivent utiliser le même type de clé.

L'exemple illustré à la figure 4 ci-dessous est une continuation de l'exemple présenté à la figure 2 dans la section précédente. Après que l'embranchement a produit deux collections PCollection contenant respectivement les noms commençant par "A" et par "B", le pipeline les fusionne en une seule collection PCollection contenant désormais tous les noms commençant par "A" ou "B". Dans ce cas, il est judicieux d'utiliser Flatten car les collections PCollection à fusionner contiennent le même type de données.

Figure 4 : Partie d'un pipeline fusionnant plusieurs collections PCollection

Sources multiples

Votre pipeline peut lire les entrées d'une ou de plusieurs sources. Si ce pipeline lit des entrées à partir de plusieurs sources et que les données de ces sources sont liées, il peut être utile de joindre les entrées. Dans l'exemple illustré à la figure 5 ci-dessous, le pipeline lit des noms et des adresses depuis BigQuery, et des noms et des numéros de commande depuis Google Cloud Storage. Le pipeline a ensuite recours à la transformation CoGroupByKey pour joindre ces informations en utilisant le nom comme clé. La collection PCollection résultante contient toutes les combinaisons de noms, d'adresses et de commandes.

Figure 5 : Pipeline comportant plusieurs sources d'entrée

Étape suivante

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.