Lenguaje de manipulación de datos

El lenguaje de manipulación de datos de BigQuery (DML) te permite actualizar, insertar y borrar datos de tus tablas de BigQuery.

Puedes ejecutar Declaraciones DML como lo harías con una declaración SELECT, con las siguientes condiciones:

  • Debes usar SQL estándar. Para habilitar SQL estándar, consulta Cambia dialectos SQL.
  • No se puede especificar una tabla de destino. Por ejemplo, en Cloud Console, debes tener la Tabla de destino configurada como Sin tabla seleccionada.

    Cloud Console no muestra ninguna tabla de destino seleccionada.

Limitaciones

  • Cada declaración DML inicia una transacción implícita, lo que significa que los cambios realizados por la instrucción se confirman de forma automática al final de cada declaración DML exitosa. No se admiten las transacciones con varias declaraciones.

  • Las filas que se escribieron hace poco en una tabla mediante la transmisión (el método tabledata.insertall) no se pueden modificar con declaraciones UPDATE, DELETE ni MERGE. Las operaciones de escritura recientes suelen ser las que ocurrieron en los últimos 30 minutos. Ten en cuenta que todas las demás filas de la tabla siguen siendo modificables mediante el uso de UPDATE, DELETE o MERGE.

  • Las subconsultas correlacionadas dentro de una when_clause, search_condition, merge_update_clause o merge_insert_clause no son compatibles con las declaraciones MERGE.

  • Las consultas que contienen Declaraciones DML no pueden usar una tabla comodín como destino de la consulta. Por ejemplo, se puede usar una tabla comodín en la cláusula FROM de una consulta UPDATE, pero no se puede usar una como destino de la operación UPDATE.

Trabajos en simultáneo

BigQuery administra la simultaneidad de las declaraciones DML que agregan, modifican o borran filas en una tabla.

Simultaneidad de DML para INSERT

Durante cualquier período de 24 horas, las primeras 1,000 declaraciones que se inserten en una tabla mediante INSERT se ejecutan en simultáneo. Una vez que se alcanza este límite, la simultaneidad de las declaraciones INSERT que se escriben en una tabla se limita a 10. Cualquier trabajo de INSERT de DML superior a 10 se pone en cola en estado PENDING. Después de que un trabajo anterior finaliza, el siguiente trabajo pendiente se quita de la cola y se ejecuta. Actualmente, se pueden poner en cola hasta 100 declaraciones DML de INSERT en una tabla, en cualquier momento.

Simultaneidad de DML para UPDATE, DELETE y MERGE

Las declaraciones DML UPDATE, DELETE y MERGE se llaman declaraciones DML mutables. Si envías una o más declaraciones DML mutables en una tabla, mientras que otros trabajos DML mutables en ella aún se ejecutan (o están pendientes), BigQuery ejecuta hasta 2 de ellas de manera simultánea, después de lo cual hasta 20 se ponen en cola como PENDING: Cuando finaliza un trabajo en ejecución, se pone en cola el siguiente trabajo pendiente. En la actualidad, las declaraciones DML de mutación que están en cola, comparten una cola por tabla de máximo 20 trabajos. Las declaraciones adicionales posteriores a la longitud máxima de la cola para cada tabla no se ejecutarán.

Los trabajos de DML de prioridad interactivos que están en cola durante más de 6 horas fallan.

Conflictos de Declaraciones DML

La ejecución simultánea de instrucciones DML mutables en una tabla puede fallar debido a conflictos en los cambios que realizan. BigQuery vuelve a intentar estas fallas.

  • Una Declaración DML INSERT que inserta filas en una tabla no entra en conflicto con ninguna otra declaración DML que se ejecute en simultáneo.

  • Una declaración DML MERGE que contiene solo una cláusula INSERT sin cláusulas UPDATE o DELETE no entra en conflicto con ninguna otra declaración DML que se ejecute en simultáneo.

  • Una declaración DML MERGE con cláusulas UPDATE o DELETE no entra en conflicto con ninguna otra declaración DML que se ejecute en simultáneo, siempre y cuando la declaración MERGE no actualice ni borre filas existentes. Por ejemplo, una declaración MERGE que solo inserta filas nuevas no entra en conflicto con otras declaraciones DML que se ejecutan en simultáneo.

Precios

Para obtener información sobre los precios de DML, consulta los precios del lenguaje de manipulación de datos en la página Precios.

Prácticas recomendadas

Para obtener el mejor rendimiento, Google recomienda los siguientes patrones:

  • Evita enviar grandes cantidades de actualizaciones o inserciones de filas individuales. Agrupa las operaciones DML cuando sea posible. Para obtener más información, consulta las declaraciones DML que actualizan o insertan filas individuales.

  • Si las actualizaciones o eliminaciones se suelen realizar en datos más antiguos o dentro de un rango de fechas en particular, considera particionar tus tablas. Esta acción garantiza que los cambios se limiten a particiones específicas dentro de la tabla.

  • Evita particionar las tablas si la cantidad de datos en cada partición es pequeña y si cada actualización modifica gran parte de las particiones.

  • Si sueles actualizar filas cuyas columnas se encuentran dentro de un rango pequeño de valores, considera usar tablas agrupadas. El agrupamiento en clústeres garantiza que los cambios se limiten a conjuntos de bloques específicos, lo que reduce la cantidad de datos que se deben leer y escribir. El siguiente es un ejemplo de una declaración UPDATE que filtra un rango de valores de columna:

    UPDATE s = "some string" WHERE id BETWEEN 54 AND 75
    

    A continuación, se muestra un ejemplo similar que filtra una lista pequeña de valores de columna:

    UPDATE s = "some string" WHERE id IN (54, 57, 60)
    

    Considera agrupar en clústeres en la columna id en estos casos.

  • Si necesitas la funcionalidad OLTP, considera usar consultas federadas de Cloud SQL, que permiten que BigQuery consulte datos que residen en Cloud SQL.

¿Qué sigue?

  • Para obtener información y muestras de la sintaxis DML, consulta Sintaxis DML.
  • Para obtener información sobre el uso de declaraciones DML en consultas programadas, consulta Programa consultas.