Langage de manipulation de données

Le langage de manipulation de données (LMD) de BigQuery vous permet de mettre à jour, d'insérer et de supprimer des données dans vos tables BigQuery.

Vous pouvez exécuter des instructions LMD comme vous le feriez pour une instruction SELECT, avec les conditions suivantes :

  • Vous devez utiliser le langage SQL standard. Pour l'activer, reportez-vous à la section Changer de dialecte SQL.
  • Vous ne pouvez pas spécifier de table de destination. Par exemple, dans l'UI Web, la valeur Destination Table (Table de destination) doit être définie sur No table selected (Aucune table sélectionnée).

    UI Web BigQuery sans table de destination sélectionnée

Limites

  • Chaque instruction LMD initie une transaction implicite, ce qui signifie que les modifications apportées par l'instruction sont automatiquement validées à la fin de chaque instruction LMD réussie. Les transactions contenant plusieurs instructions ne sont pas acceptées.

  • Les lignes qui ont été écrites récemment dans une table en flux continu (à l'aide de la méthode tabledata.insertall) ne peuvent pas être modifiées avec les instructions UPDATE, DELETE ou MERGE. Les écritures récentes sont généralement celles qui se produisent dans les 30 dernières minutes. Notez que vous pouvez modifier toutes les autres lignes de la table à l'aide des instructions UPDATE, DELETE ou MERGE.

  • Les sous-requêtes liées dans when_clause, search_condition, merge_update_clause ou merge_insert_clause ne sont pas compatibles avec les instructions MERGE.

  • Les requêtes contenant des instructions LMD ne peuvent pas utiliser une table générique comme cible de la requête. Par exemple, une table générique peut être utilisée dans la clause FROM d'une requête UPDATE, mais une table générique ne peut pas être utilisée comme cible de l'opération UPDATE.

Tâches simultanées

BigQuery gère la simultanéité des instructions LMD qui ajoutent, modifient ou suppriment des lignes dans une table.

Instructions LMD INSERT simultanées

Au cours d'une période de 24 heures, les 1 000 premières instructions insérées (INSERT) dans une table s'exécutent simultanément. Une fois cette limite atteinte, les instructions INSERT simultanées qui écrivent dans une table sont limitées à 10. Toutes les tâches LMD INSERT au-delà de 10 sont placées en file d'attente à l'état PENDING (en attente). Une fois la tâche précédente terminée, la tâche suivante à l'état PENDING est retirée de la file d'attente et exécutée. Actuellement, jusqu'à 100 instructions LMD INSERT peuvent être placées en file d'attente sur une table à tout moment.

Instructions LMD UPDATE, DELETE et MERGE simultanées

Nous faisons référence aux instructions LMD UPDATE, DELETE et MERGE en tant qu'instructions LMD en mutation. Lorsque vous envoyez simultanément plusieurs instructions LMD en mutation dans une table, BigQuery exécute un nombre fixe de ces instructions de manière simultanée. Toutes les autres tâches LMD en mutation sont automatiquement placées en file d'attente à l'état PENDING (en attente). Une fois l'exécution de la tâche précédente terminée, la tâche suivante à l'état PENDING est retirée de la file d'attente et exécutée.

Les tâches LMD interactives (INTERACTIVE) prioritaires placées dans la file d'attente pendant plus de six heures échouent.

Conflits des instructions LMD

L'exécution simultanée d'instructions LMD en mutation sur une table peut échouer en raison de conflits dus aux modifications apportées. BigQuery retente ces exécutions en échec.

  • Une instruction LMD INSERT qui insère des lignes dans une table n'entre pas en conflit avec une autre instruction LMD exécutée simultanément.

  • Les instructions LMD MERGE, qui ne contiennent qu'une clause INSERT sans clause UPDATE ou DELETE n'entrent pas en conflit avec d'autres instructions LMD exécutées simultanément.

  • Les instructions LMD MERGE avec des clauses UPDATE ou DELETE n'entrent pas en conflit avec d'autres instructions LMD exécutées simultanément tant que l'instruction MERGE ne conduit pas à la mise à jour ou à la suppression de lignes existantes.

Tarifs

Pour plus d'informations sur la tarification du LMD, consultez la section Tarifs pour les requêtes LMD de la page Tarifs.

Étapes suivantes