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.

  • Las declaraciones DML están sujetas a los límites de frecuencia de las operaciones de actualización de metadatos de la tabla. Para obtener más información, consulta las declaraciones del lenguaje de manipulación de datos en el documento Cuotas y límites.

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 PENDIENTE. 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

Nos referimos a las declaraciones DML de UPDATE, DELETE y MERGE, como mutaciones de declaraciones DML. Si envías una o más mutaciones de declaraciones DML en una tabla mientras otros trabajos de mutaciones DML están en ejecución (o pendientes), BigQuery las ejecutará simultáneamente, hasta un número fijo de mutaciones simultáneas de declaraciones DML. Si alcanzas el límite de simultaneidad, BigQuery pondrá en cola automáticamente cualquier trabajo de mutación DML adicional en un estado PENDIENTE. Cuando finaliza un trabajo en ejecución, se pone en cola el siguiente trabajo PENDIENTE.

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.

  • Las Declaraciones DML MERGE que contienen solo una cláusula INSERT sin cláusulas UPDATE o DELETE no entran en conflicto con ninguna otra Declaración DML que se ejecute en simultáneo.

  • Las Declaraciones DML MERGE con cláusulas UPDATE o DELETE no entran en conflicto con ninguna otra Declaración DML que se ejecute en simultáneo, siempre que la declaración MERGE no ocasione la actualización o eliminación de filas existentes.

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.

Recomendaciones

Para obtener el mejor rendimiento, recomendamos aplicar 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.

Próximos pasos

  • Consulta la sintaxis y las muestras de DML en la página de sintaxis de DML.