Ce document présente un abonnement BigQuery, son flux de travail et les propriétés associées.
Un abonnement BigQuery est un type d'abonnement d'exportation qui écrit les messages dans une table BigQuery existante à mesure qu'ils sont reçus. Vous n'avez pas besoin de configurer un client abonné distinct. utiliser la console Google Cloud, la Google Cloud CLI, les bibliothèques clientes l'API Pub/Sub pour créer, mettre à jour, répertorier, dissocier ou supprimer Abonnement BigQuery.
Sans le type d'abonnement BigQuery, vous avez besoin d'un abonnement pull ou push, (comme Dataflow) qui lit les messages et les écrit dans une table BigQuery. Les frais généraux liés à l'exécution d'une tâche Dataflow ne sont pas nécessaires lorsque les messages ne nécessitent pas de traitement supplémentaire avant d'être stockés dans une table BigQuery. Vous pouvez utiliser un abonnement BigQuery à la place.
Toutefois, un pipeline Dataflow est toujours recommandé Les systèmes Pub/Sub pour lesquels une transformation des données est requise avant les données sont stockées dans une table BigQuery. Pour découvrir comment diffuser des données de Pub/Sub vers BigQuery avec transformation à l'aide de Dataflow, consultez Diffuser des données en streaming depuis Pub/Sub vers BigQuery.
Le modèle d'abonnement Pub/Sub vers BigQuery à partir de Dataflow applique une diffusion de type "exactement une fois" par défaut. Cela se fait généralement via des mécanismes de déduplication dans le pipeline Dataflow. Toutefois, l'abonnement BigQuery n'est compatible qu'avec la distribution au moins une fois. Si la déduplication exacte est essentielle pour votre cas d'utilisation, envisagez d'utiliser des processus en aval dans BigQuery pour gérer les doublons potentiels.
Avant de commencer
Avant de lire ce document, assurez-vous de maîtriser les points suivants:
le fonctionnement de Pub/Sub et les différentes les termes de Pub/Sub.
Les différents types d'abonnements compatibles avec Pub/Sub et les raisons pour lesquelles vous pouvez utiliser un abonnement BigQuery.
Fonctionnement de BigQuery, et configuration et gestion des tables BigQuery
Workflow d'abonnement BigQuery
L'image suivante présente le workflow entre un abonnement BigQuery et BigQuery.
Voici une brève description du workflow qui fait référence à la figure 1 :
- Pub/Sub utilise l'API d'écriture de stockage BigQuery pour envoyer des données à la table BigQuery.
- Les messages sont envoyés par lots à la table BigQuery.
- À la fin d'une opération d'écriture, l'API renvoie une réponse de réponse.
- En cas d'échec de l'opération d'écriture, le message Pub/Sub lui-même est confirmé de manière négative. La le message est ensuite renvoyé. Si le message échoue suffisamment de fois et qu'un sujet de lettres mortes est configuré sur l'abonnement, le message est déplacé vers le sujet de lettres mortes.
Propriétés d'un abonnement BigQuery
Propriétés que vous configurez pour un abonnement BigQuery déterminer la table BigQuery dans laquelle Pub/Sub les messages et le type de schéma de cette table.
Pour en savoir plus, consultez la page BigQuery propriétés.
Compatibilité des schémas
Cette section ne s'applique que si vous sélectionnez l'option Utiliser un schéma avec sujet lorsque vous créez un abonnement BigQuery.
Pub/Sub et BigQuery recourent à des méthodes différentes définir leurs schémas. Les schémas Pub/Sub sont définis dans Apache au format Avro ou Protocol Buffer, tandis que Les schémas BigQuery sont définis à l'aide d'un différents formats.
Voici une liste des des informations importantes sur la compatibilité du schéma entre un sujet Pub/Sub et une table BigQuery.
Tout message contenant un champ dont le format est incorrect n'est pas écrit dans dans BigQuery.
Dans le schéma BigQuery,
INT
,SMALLINT
,INTEGER
BIGINT
,TINYINT
etBYTEINT
sont des alias deINTEGER
.DECIMAL
est un alias pourNUMERIC
; etBIGDECIMAL
est un alias deBIGNUMERIC
.Lorsque le type du schéma de sujet est
string
et que le type de la table BigQuery estJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
ouBIGNUMERIC
, toute valeur de ce champ dans un message Pub/Sub doit respecter le format spécifié pour le type de données BigQuery.Certains types logiques Avro sont acceptés, comme indiqué dans le tableau suivant. Tous les types logiques non répertoriés ne correspondent qu'au type Avro équivalent qu'ils annoter, comme indiqué dans la spécification Avro.
Vous trouverez ci-dessous un ensemble de mappages de différents formats de schémas sur les types de données BigQuery.
Types Avro
Type Avro | Type de données BigQuery |
null |
Any NULLABLE |
boolean |
BOOLEAN |
int |
INTEGER , NUMERIC ou
BIGNUMERIC |
long |
INTEGER , NUMERIC ou
BIGNUMERIC |
float |
FLOAT64 , NUMERIC ou
BIGNUMERIC |
double |
FLOAT64 , NUMERIC ou
BIGNUMERIC |
bytes |
BYTES , NUMERIC ou
BIGNUMERIC |
string |
STRING , JSON
TIMESTAMP , DATETIME
DATE , TIME
NUMERIC ou BIGNUMERIC |
record |
RECORD/STRUCT |
array sur Type |
REPEATED Type |
map avec le type de valeur ValueType
|
REPEATED STRUCT <key STRING, value
ValueType> |
union avec deux types, dont un qui est
null et l'autre Type |
NULLABLE Type |
autres union s |
Impossible à mapper |
fixed |
BYTES , NUMERIC ou BIGNUMERIC |
enum |
INTEGER |
Types logiques Avro
Type logique Avro | Type de données BigQuery |
timestamp-micros |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
duration |
INTERVAL |
decimal |
NUMERIC ou BIGNUMERIC |
Types de tampon de protocole
Type de tampon de protocole | Type de données BigQuery |
double |
FLOAT64 , NUMERIC ou
BIGNUMERIC |
float |
FLOAT64 , NUMERIC ou BIGNUMERIC |
int32 |
INTEGER , NUMERIC
BIGNUMERIC ou DATE |
int64 |
INTEGER , NUMERIC
BIGNUMERIC , DATE
DATETIME ou TIMESTAMP |
uint32 |
INTEGER , NUMERIC
BIGNUMERIC ou DATE |
uint64 |
NUMERIC ou BIGNUMERIC |
sint32 |
INTEGER , NUMERIC ou BIGNUMERIC |
sint64 |
INTEGER , NUMERIC , BIGNUMERIC , DATE , DATETIME ou TIMESTAMP |
fixed32 |
INTEGER , NUMERIC
BIGNUMERIC ou DATE |
fixed64 |
NUMERIC ou BIGNUMERIC |
sfixed32 |
INTEGER , NUMERIC
BIGNUMERIC ou DATE |
sfixed64 |
INTEGER , NUMERIC , BIGNUMERIC , DATE , DATETIME ou TIMESTAMP |
bool |
BOOLEAN |
string |
STRING , JSON
TIMESTAMP , DATETIME
DATE , TIME
NUMERIC ou BIGNUMERIC |
bytes |
BYTES , NUMERIC ou BIGNUMERIC |
enum |
INTEGER |
message |
RECORD/STRUCT |
oneof |
Non cartographié |
map<KeyType, ValueType> |
REPEATED RECORD<key KeyType, value
ValueType> |
enum |
INTEGER |
repeated/array of Type |
REPEATED Type |
Représentation sous forme de nombre entier de date et d'heure
Lors du mappage d'un entier sur l'un des types de date ou d'heure, le nombre doit représenter la valeur correcte. Voici le mappage à partir des données BigQuery à l'entier qui les représente.
Type de données BigQuery | Représentation des entiers |
DATE |
Nombre de jours écoulés depuis l'époque Unix (1er janvier 1970) |
DATETIME |
Date et heure en microsecondes exprimées en heure civile à l'aide de CivilTimeEncoder |
TIME |
Temps en microsecondes, exprimé en temps civil à l'aide du CivilTimeEncoder |
TIMESTAMP |
Nombre de microsecondes écoulées depuis l'epoch Unix, le 1er janvier 1970 à 00:00:00 UTC |
Capture des données modifiées dans BigQuery
Les abonnements BigQuery sont compatibles avec la capture de données modifiées (CDC)
des mises à jour
use_topic_schema
ou
use_table_schema
est défini sur true
dans les propriétés de l'abonnement. Pour utiliser cette fonctionnalité avec use_topic_schema
, définissez le schéma du sujet avec les champs suivants :
_CHANGE_TYPE
(obligatoire) : champstring
défini surUPSERT
ouDELETE
.Si
_CHANGE_TYPE
est défini surUPSERT
dans un message Pub/Sub écrit dans la table BigQuery, BigQuery met à jour la ligne avec la même clé si elle existe ou insère une nouvelle ligne si elle n'existe pas.Si un message Pub/Sub écrit dans
_CHANGE_TYPE
de la table BigQuery est défini surDELETE
. BigQuery supprime ensuite la ligne de la table comportant la la même clé, le cas échéant.
_CHANGE_SEQUENCE_NUMBER
(facultatif) : champint64
(long
) ouint32
(int
) défini pour s'assurer que les mises à jour et les suppressions apportées à la table BigQuery sont traitées dans l'ordre. Messages pour la même clé de ligne doit contenir une valeur qui augmente de façon monotone pour_CHANGE_SEQUENCE_NUMBER
. Les messages comportant des numéros de séquence inférieurs au numéro de séquence le plus élevé traité pour une ligne sans aucune incidence sur la ligne de la table BigQuery. Remarque que Pub/Sub requiert une valeur basée sur des entiers la valeur basée sur une chaîne utilisée lors de l'interaction avec BigQuery directement.
Pour utiliser la fonctionnalité avec use_table_schema
, incluez les champs qui précèdent dans
le message JSON.
Autorisations du compte de service Pub/Sub
Pour créer un abonnement BigQuery, compte de service doit être autorisé à écrire dans le bucket table BigQuery et lire ses métadonnées. Pour plus d'informations, consultez la page Attribuer des rôles BigQuery Service Pub/Sub compte.
Gérer les échecs de messages
Lorsqu'un message Pub/Sub ne peut pas être écrit dans BigQuery, il ne peut pas être confirmé. Pour transférer ces
de messages impossibles à distribuer, configurez une lettre morte
sujet sur la
Abonnement BigQuery. Le message Pub/Sub
transférées au file d'attente de lettres mortes contient un attribut
CloudPubSubDeadLetterSourceDeliveryErrorMessage
qui a pour cause
Impossible d'écrire le message Pub/Sub dans
dans BigQuery.
Si Pub/Sub ne peut pas écrire de messages dans BigQuery, Pub/Sub interrompt la distribution des messages comme comportement d'intervalle push. Toutefois, si le a un lettre morte en pièce jointe Pub/Sub n'annule pas la distribution des messages en cas d'échec sont dues à des erreurs de compatibilité de schéma.
Quotas et limites
Des limites de quota s'appliquent à l'abonné BigQuery par région. Pour en savoir plus, consultez la section Quotas et limites Pub/Sub.
Les abonnements BigQuery écrivent des données à l'aide de la classe API BigQuery Storage Write. Pour sur les quotas et les limites de l'API Storage Write, consultez la section API BigQuery Storage Write requêtes. Les abonnements BigQuery ne consomment que le quota de débit de l'API Storage Write. Toi peut ignorer les autres considérations relatives au quota de l'API Storage Write dans cette instance.
Tarifs
Pour connaître les tarifs des abonnements BigQuery, consultez la Page des tarifs de Pub/Sub
Étape suivante
Créez un abonnement, tel qu'un abonnement BigQuery abonnement.
Résolvez les problèmes liés à un abonnement BigQuery.
En savoir plus sur BigQuery
Consultez les tarifs de Pub/Sub, y compris les Abonnements BigQuery.
Créez ou modifiez un abonnement à l'aide des commandes CLI
gcloud
.Créer ou modifier un abonnement avec REST API.