Diffuser des données à l'aide de l'API Storage Write
Ce document explique comment utiliser l'API BigQuery Storage Write pour diffuser des données en streaming dans BigQuery.
Dans les scénarios de streaming, les données arrivent en continu et doivent être disponibles pour les lectures avec une latence minimale. Lorsque vous utilisez l'API BigQuery Storage Write pour les charges de travail de streaming, tenez compte des garanties dont vous avez besoin :
- Si votre application n'a besoin que de la sémantique de type "au moins une fois", utilisez le flux par défaut.
- Si vous avez besoin de la sémantique de type "exactement une fois", créez un ou plusieurs flux en type commit et utilisez des décalages de flux pour garantir des écritures de type "exactement une fois".
En type commit, les données écrites dans le flux sont disponibles pour la requête dès que le serveur a confirmé la requête d'écriture. Le flux par défaut utilise également le type commit, mais n'offre pas de garanties de type "exactement une fois".
Utiliser le flux par défaut pour la sémantique de type "au moins une fois"
Si votre application peut accepter que des enregistrements en double apparaissent dans la table de destination, nous vous recommandons d'utiliser le flux par défaut pour les scénarios de streaming.
Le code suivant montre comment écrire des données dans le flux par défaut :
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour BigQuery, consultez la page sur les bibliothèques clientes BigQuery. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour BigQuery, consultez la page sur les bibliothèques clientes BigQuery.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Utiliser le multiplexage
Vous activez le multiplexage au niveau du rédacteur de flux pour le flux par défaut uniquement. Pour activer le multiplexage Java, appelez la méthode setEnableConnectionPool
lorsque vous créez un objet StreamWriter
ou JsonStreamWriter
:
// One possible way for constructing StreamWriter StreamWriter.newBuilder(streamName) .setWriterSchema(protoSchema) .setEnableConnectionPool(true) .build(); // One possible way for constructing JsonStreamWriter JsonStreamWriter.newBuilder(tableName, bigqueryClient) .setEnableConnectionPool(true) .build();
Pour activer le multiplexage Go, consultez la section Partage de connexion (multiplexage).
Utiliser le type commit pour la sémantique de type "exactement une fois"
Si vous avez besoin d'une sémantique d'écriture de type "exactement une fois", créez un flux d'écriture en type commit. En type commit, les enregistrements sont disponibles pour la requête dès que le client reçoit l'accusé de réception du backend.
Le type commit permet d'effectuer une distribution "exactement une fois" dans un flux au moyen de décalages d'enregistrement. En utilisant des décalages d'enregistrement, l'application spécifie le prochain décalage d'ajout dans chaque appel à AppendRows
. L'opération d'écriture n'est effectuée que si la valeur de décalage correspond au décalage d'ajout suivant. Pour plus d'informations, consultez la section Gérer les décalages de flux pour obtenir une sémantique de type "exactement une fois".
Si vous ne fournissez pas de décalage, les enregistrements sont ajoutés à la fin actuelle du flux. Dans ce cas, si une requête d'ajout renvoie une erreur, toute nouvelle tentative pourrait entraîner l'affichage de l'enregistrement plusieurs fois dans le flux.
Pour utiliser le type commit, procédez comme suit :
Java
- Appelez
CreateWriteStream
pour créer un ou plusieurs flux en type commit. - Pour chaque flux, appelez
AppendRows
dans une boucle pour écrire des lots d'enregistrements. - Appelez
FinalizeWriteStream
pour chaque flux afin de libérer le flux. Après avoir appelé cette méthode, vous ne pouvez plus écrire de lignes dans le flux. Cette étape est facultative en type commit, mais permet d'éviter de dépasser la limite pour les flux actifs. Pour en savoir plus, consultez la section Limiter le taux de création de flux.
Node.js
- Appelez
createWriteStreamFullResponse
pour créer un ou plusieurs flux en type commit. - Pour chaque flux, appelez
appendRows
dans une boucle pour écrire des lots d'enregistrements. - Appelez
finalize
pour chaque flux afin de libérer le flux. Après avoir appelé cette méthode, vous ne pouvez plus écrire de lignes dans le flux. Cette étape est facultative en type commit, mais permet d'éviter de dépasser la limite pour les flux actifs. Pour en savoir plus, consultez la section Limiter le taux de création de flux.
Vous ne pouvez pas supprimer un flux explicitement. Les flux suivent la valeur TTL (Time To Live) définie par le système :
- Un flux validé a une valeur TTL de trois jours s'il ne présente pas de trafic.
- Par défaut, un flux mis en mémoire tampon a une valeur TTL de sept jours s'il ne présente pas de trafic.
Le code suivant montre comment utiliser le type commit :
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour BigQuery, consultez la page sur les bibliothèques clientes BigQuery. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour BigQuery, consultez la page sur les bibliothèques clientes BigQuery.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.