Linguagem de manipulação de dados

A linguagem de manipulação de dados (DML) do BigQuery permite atualizar, inserir e excluir dados das tabelas do BigQuery.

É possível executar instruções DML como se fossem uma instrução SELECT, com as seguintes condições:

  • É necessário usar o SQL padrão. Para ativá-lo, consulte Como ativar o SQL padrão.
  • Não é possível especificar uma tabela de destino. Por exemplo, na IU da Web, é necessário definir Tabela de destino como Nenhuma tabela selecionada.

    IU da Web do BigQuery mostrando que nenhuma tabela de destino está selecionada.

Limitações

  • Uma instrução DML inicia uma transação implícita. Isso significa que as alterações feitas por ela são confirmadas automaticamente no final de cada instrução bem-sucedida. Transações de múltiplas instruções não são aceitas.

  • As linhas gravadas recentemente em uma tabela usando streaming (o método tabledata.insertall) não podem ser modificadas com instruções UPDATE, DELETE ou MERGE. Consideramos gravações recentes aquelas que ocorreram nos últimos 30 minutos. Todas as outras linhas da tabela podem ser alteradas usando UPDATE, DELETE ou MERGE.

  • Subconsultas correlatas em when_clause, search_condition, merge_update_clause ou merge_insert_clause não são compatíveis com instruções MERGE.

  • Consultas que contêm instruções DML não podem usar uma tabela curinga como destino da consulta. Por exemplo, uma tabela curinga pode ser usada na cláusula FROM de uma consulta UPDATE, mas não pode ser usada como destino da operação UPDATE.

Jobs simultâneos

O BigQuery gerencia a simultaneidade de instruções DML que adicionam, modificam ou excluem linhas em uma tabela.

Simultaneidade de DML INSERT

Durante qualquer período de 24 horas, as primeiras 1.000 instruções INSERT em uma tabela são executadas simultaneamente. Depois que esse limite é atingido, a simultaneidade de instruções INSERT que gravam em uma tabela é limitada a 10. Todos os jobs DML INSERT além de 10 são colocados em fila no estado PENDING. Depois que um job anterior é concluído, o próximo job PENDING é retirado da fila e executado. Atualmente, até 100 instruções DML INSERT podem ser enfileiradas em uma tabela a qualquer momento.

Simultaneidade de DML UPDATE, DELETE, MERGE

Nos referimos às instruções DML UPDATE, DELETE e MERGE como instruções DML mutantes. Quando você envia mais de uma instrução DML mutante simultaneamente para uma tabela, o BigQuery executa um número fixo dessas instruções simultaneamente. Todos os novos jobs DML mutantes nessa tabela são colocados em fila automaticamente no estado PENDING. Quando um job que estava em execução é concluído, o próximo job PENDING é retirado da fila e executado.

Os jobs DML de prioridade INTERACTIVE que estão na fila por mais de seis horas falham.

Conflitos de instrução DML

A execução simultânea de instruções DML mutantes em uma tabela pode falhar devido a conflitos entre alterações feitas por elas. O BigQuery repete essas falhas.

  • Uma instrução DML INSERT que insere linhas em uma tabela não entra em conflito com nenhuma outra instrução DML em execução simultânea.

  • As instruções DML MERGE com apenas uma cláusula INSERT sem cláusulas UPDATE ou DELETE não entram em conflito com nenhuma outra instrução DML em execução simultânea.

  • As instruções DML MERGE com cláusulas UPDATE ou DELETE não entram em conflito com nenhuma outra instrução DML executada simultaneamente, desde que a instrução MERGE não leve à atualização ou exclusão de linhas existentes.

Preços

Para saber mais sobre os preços das instruções DML, consulte Preços da linguagem de manipulação de dados, na página "Preços".

A seguir