2017-10-17 7 views

Répondre

3

Actuellement, ce n'est pas possible. Il est compliqué par le fait qu'un seul BigQueryIO.write() peut utiliser beaucoup de travaux BigQuery sous le capot (ie BigQueryIO.write() est une API polyvalente pour l'écriture de données dans BigQuery, plutôt qu'une API pour travailler avec un seul travail de chargement BigQuery spécifique), par exemple:

  • Si la quantité de données à charger est plus grande que les limites BigQuery pour une seule tâche de charge, BigQueryIO.write() se shard dans plusieurs tâches de charge.
  • Si vous utilisez l'une des méthodes d'écriture dépendant de la destination (par exemple DynamicDestinations) et que vous chargez plusieurs tables en même temps, il y aura au moins un travail de chargement par table.
  • Si vous écrivez un PCollection non borné en utilisant la méthode BATCH_LOADS, il émettra périodiquement des travaux de chargement pour les données nouvellement arrivées, sous réserve des remarques ci-dessus.
  • Si vous utilisez la méthode STREAMING_INSERTS (il est autorisé à l'utiliser même si vous écrivez un PCollection), il n'y aura aucun travail de chargement.

Vous aurez besoin d'utiliser l'une des solutions de contournement typiques pour "faire quelque chose après que quelque chose d'autre soit fait", qui est, par exemple. attendez que le pipeline entier soit terminé en utilisant pipeline.run().waitUntilFinish() dans votre programme principal, puis effectuez votre deuxième action.

+0

Très bonne réponse! Je me demandais juste si vous pouviez nous dire où l'écriture dans les fragments se passe dans le code. Est-ce la bibliothèque 'apitools' qui gère déjà cela ou est-ce la classe' BigQuerySink'? J'essayais de trouver où cela se passe dans le code mais je ne l'ai pas encore trouvé :) –

+0

@jkff Okay. Mais la solution de contournement que vous avez suggéré de travailler dans le cas de modèles, car selon ma compréhension toute instruction écrite après pipeline.run(). WaitUntilFinish() ne fera pas partie de mon modèle. Ai-je raison? – rish0097

+0

Vous avez raison. Malheureusement, il n'y a pas de bonne solution pour cela avec des templates actuellement. – jkff