BigQuery permet de lire et d’écrire dans une table Google BigQuery, y compris dans des datasets publics.
La lecture utilise l’API REST BigQuery (tabledata.list) ; seules les tables natives peuvent donc être lues (les vues, vues matérialisées et tables externes ne le peuvent pas). L’écriture utilise des insertions en streaming (tabledata.insertAll), ce qui nécessite d’activer la facturation pour le projet.
Les écritures ne sont pas atomiques : un INSERT volumineux est envoyé par batches (500 lignes au maximum par requête et scindé si nécessaire pour respecter la limite de 10 Mo imposée par BigQuery’s pour la taille des requêtes), une même requête peut ne réussir que partiellement (BigQuery peut valider certaines lignes d’une requête tout en rejetant les autres avec insertErrors), et un batch ultérieur peut être rejeté après l’acceptation de batches précédents — dans les deux cas, les lignes déjà validées restent dans BigQuery tandis que la requête signale une erreur. Chaque ligne comporte un insertId stable (dérivé de l’identifiant de la requête et de la position ordinale de la ligne) afin que BigQuery déduplique au mieux les lignes réessayées ; comme le insertId dépend de la position ordinale, la réexécution du même INSERT ne déduplique que si les lignes sont présentées dans le même ordre (par exemple en mode monothread, avec max_threads = 1 et max_insert_threads = 1). Consultez les limitations de la fonction de table bigquery pour plus de détails.
Création d’une table
REQUIRED sans expression de valeur par défaut peut être lue, mais pas écrite : les insertions en streaming BigQuery rejettent les lignes omettant un tel champ, et cet INSERT est donc rejeté d’emblée. Lorsque le champ REQUIRED omis déclare une defaultValueExpression, BigQuery renseigne la valeur par défaut et la table reste accessible en écriture. Un RECORD NULLABLE est mappé vers Nullable(Tuple(...)) afin que les enregistrements NULL puissent effectuer un aller-retour sans perte. Lors de la déclaration explicite des colonnes, un champ RECORD peut à la place être déclaré comme un simple Tuple(...), au prix de la conversion d’un NULL correspondant à l’ensemble de l’enregistrement en tuple par défaut ; la seule différence acceptée par rapport au type déduit consiste à supprimer le Nullable qui encapsule le Tuple d’un RECORD, et uniquement pour cet enregistrement — la nullabilité ne peut pas être déplacée vers un autre enregistrement, interne ou externe.
Paramètres du moteur
project— Le projet Google Cloud propriétaire du jeu de données.dataset— Le nom du jeu de données.table— Le nom de la table.access_token— Un jeton d’accès OAuth 2.0 (argument positionnel facultatif).
key = value. Consultez la fonction de table bigquery pour obtenir la liste complète des clés et une description des méthodes d’authentification. Une seule méthode d’authentification doit être fournie ; pour une table permanente, il est préférable d’utiliser un service_account_key ou un refresh_token plutôt qu’un access_token, car les jetons d’accès expirent au bout d’une heure.