Eliminaciones

En este documento, se describe cómo borrar los datos almacenados en Bigtable tablas, analiza cuándo debes usar cada enfoque y proporciona ejemplos. Antes de leer esta página, debes familiarizarte con Bigtable descripción general y comprender los conceptos involucrados en esquema el diseño de tu producto.

Para mantener la coherencia, las descripciones en esta página hacen referencia a los métodos de API que son para cada tipo de solicitud. Sin embargo, te recomendamos que siempre usa uno de los clientes Bigtable bibliotecas para acceder a las APIs de Bigtable en lugar de usar REST o RPC.

Ejemplos en esta página datos de muestra similares a los que podría almacenar en Bigtable.

Para conocer la cantidad de veces que puedes usar las operaciones descritas en esta página por día, consulta Cuotas y límites.

Cómo borra los datos Bigtable

Cuando envías una solicitud de eliminación, las celdas se marcan para su eliminación y no se pueden leer. Los datos se quitan hasta una semana después durante compactación, un proceso en segundo plano que optimiza la tabla de forma continua. Los metadatos de la eliminación pueden hacer que los datos tomen un poco más de espacio (varios KB por fila) durante algunos días después de enviar una de eliminación, hasta que se realice la siguiente compactación.

Siempre puedes enviar una solicitud de eliminación, incluso si tu clúster superó el de almacenamiento, y las operaciones de lectura y escritura están bloqueadas.

Cómo borrar un rango de filas

Si quieres borrar una gran cantidad de datos almacenados en filas contiguas, usa dropRowRange Esta operación borra todas las filas de un rango de filas identificadas con una fila inicial y final, o un prefijo de clave de fila.

A continuación, se enumeran los valores clave de fila que proporcionas cuando borras un rango de filas. tratarse como datos de servicio. Para obtener información sobre cómo se manejan los datos del servicio, consulta el Aviso de Privacidad de Google Cloud.

Una vez que la eliminación se haya completado correctamente y recibas una respuesta, puedes escribir de forma segura los datos en el mismo rango de filas.

La operación dropRowRange tiene las siguientes restricciones:

  • No puedes descartar un rango de filas desde una vista autorizada.
  • No puedes llamar al método dropRowRange de forma asíncrona. Si envías un solicitud dropRowRange a una tabla mientras hay otra en curso Bigtable muestra un error UNAVAILABLE con el mensaje A DropRowRange operation is already ongoing. Para resolver el error, envía el de nuevo.
  • Con las instancias que usan la replicación, ten en cuenta que Bigtable podría tardar mucho tiempo en completarse debido al aumento la latencia de replicación y el uso de CPU. Para borrar datos de una instancia que usa replicación, usa la API de datos para leer y borrar tu datos categóricos.

En las siguientes muestras de código, se indica cómo descartar un rango de filas que comienzan con el prefijo de clave de fila phone#5c10102:

Java

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient;
import java.io.IOException;

public class DropRowRangeExample {
  public void dropRowRange(String projectId, String instanceId, String tableId) throws IOException {
    try (BigtableTableAdminClient tableAdminClient =
        BigtableTableAdminClient.create(projectId, instanceId)) {
      tableAdminClient.dropRowRange(tableId, "phone#4c410523");
    }
  }
}

Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

def drop_row_range(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row_key_prefix = "phone#4c410523"
    table.drop_by_prefix(row_key_prefix, timeout=200)

Node.js

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

await table.deleteRows('phone#5c10102');
await printRows();

Borra datos con los métodos de la API de datos

Si necesitas eliminar pequeñas cantidades de datos no contiguos, la eliminación de datos mediante un método que llame a la API de Cloud Bigtable (API de datos) suele ser el mejor es tu mejor opción. Usa estos métodos si quieres borrar los MB, no los GB, de datos de una solicitud. Usar la API de datos es la única forma de borrar datos de una columna (no de una columna familia).

Los métodos de la API de datos llaman a MutateRows con uno de tres tipos de mutación:

  • DeleteFromColumn
  • DeleteFromFamily
  • DeleteFromRow

Una solicitud de eliminación con la API de datos es atómica: la solicitud se realiza correctamente y se borran todos los datos o la solicitud falla y no se quita ningún dato.

En la mayoría de los casos, evita usar métodos CheckAndMutate para borrar datos. En raras ocasiones si necesitas coherencia sólida, puedes usar pero ten en cuenta que consume muchos recursos y que el rendimiento afectado.

Si quieres usar MutateRows para borrar datos, debes enviar una solicitud readRows con un para determinar lo que quieres borrar y, luego, enviarás para cada solicitud. Para ver una lista de los filtros disponibles, consulta Filtros.

En las muestras de esta sección, se supone que ya determinaste qué datos borrar.

Borrar de una columna

En las siguientes muestras de código, se explica cómo borrar todas las celdas de una columna seguidas:

Java

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.Mutation;
import com.google.cloud.bigtable.data.v2.models.RowMutation;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class DeleteFromColumnExample {
  public void deleteFromColumnCells(String projectId, String instanceId, String tableId)
      throws IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      Mutation mutation = Mutation.create().deleteCells("cell_plan", "data_plan_01gb");
      dataClient.mutateRow(
          RowMutation.create(TableId.of(tableId), "phone#4c410523#20190501", mutation));
    }
  }
}

Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

def delete_from_column(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row = table.row("phone#4c410523#20190501")
    row.delete_cell(column_family_id="cell_plan", column="data_plan_01gb")
    row.commit()

asyncio de Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

async def delete_from_column(project_id, instance_id, table_id):
    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    await table.mutate_row(
        "phone#4c410523#20190501",
        DeleteRangeFromColumn(family="cell_plan", qualifier=b"data_plan_01gb"),
    )

    await table.close()
    await client.close()

Node.js

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

await table.mutate({
  key: 'phone#4c410523#20190501',
  method: 'delete',
  data: {
    column: 'cell_plan:data_plan_05gb',
  },
});
await printRows();

Borrar de una familia de columnas

En las siguientes muestras de código, se explica cómo borrar celdas de una familia de columnas seguidas:

Java

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.RowMutation;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class DeleteFromColumnFamilyExample {
  public void deleteFromColumnFamily(String projectId, String instanceId, String tableId)
      throws IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      dataClient.mutateRow(
          RowMutation.create(TableId.of(tableId), "phone#5c10102#20190501")
              .deleteFamily("stats_summary"));
    }
  }
}

Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

def delete_from_column_family(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row = table.row("phone#4c410523#20190501")
    row.delete_cells(column_family_id="cell_plan", columns=row.ALL_COLUMNS)
    row.commit()

asyncio de Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

async def delete_from_column_family(project_id, instance_id, table_id):
    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    await table.mutate_row("phone#4c410523#20190501", DeleteAllFromFamily("cell_plan"))

    await table.close()
    await client.close()

Node.js

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

await table.mutate({
  key: 'phone#4c410523#20190501',
  method: 'delete',
  data: {
    column: 'cell_plan',
  },
});
await printRows();

Borrar de una fila

En los siguientes fragmentos de código, se demuestra cómo borrar todas las celdas de una fila:

Java

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.Mutation;
import com.google.cloud.bigtable.data.v2.models.RowMutation;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class DeleteFromRowExample {
  public void deleteFromRow(String projectId, String instanceId, String tableId)
      throws IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      Mutation mutation = Mutation.create().deleteRow();
      dataClient.mutateRow(
          RowMutation.create(TableId.of(tableId), "phone#4c410523#20190501", mutation));
    }
  }
}

Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

def delete_from_row(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row = table.row("phone#4c410523#20190501")
    row.delete()
    row.commit()

asyncio de Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

async def delete_from_row(project_id, instance_id, table_id):
    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    await table.mutate_row("phone#4c410523#20190501", DeleteAllFromRow())

    await table.close()
    await client.close()

Node.js

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

const row = table.row('phone#4c410523#20190501');
await row.delete();
await printRows();

Borrar mediante la transmisión y el procesamiento por lotes

La mejor manera de borrar las solicitudes de eliminación suele ser la transmisión y el procesamiento por lotes a grandes cantidades de datos. Esta estrategia puede ser útil cuando tienes información más requisitos de retención de datos que los permitidos por las políticas de recolección de elementos no utilizados.

Los siguientes fragmentos de código inician un flujo de datos (lectura filas), pasarlos por lotes y borrar todos los Celdas en la columna data_plan_01gb1 de la familia de columnas cell_plan:

Java

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.api.gax.batching.Batcher;
import com.google.api.gax.rpc.ServerStream;
import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.Query;
import com.google.cloud.bigtable.data.v2.models.Row;
import com.google.cloud.bigtable.data.v2.models.RowMutationEntry;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class BatchDeleteExample {
  public void batchDelete(String projectId, String instanceId, String tableId)
      throws InterruptedException, IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      try (Batcher<RowMutationEntry, Void> batcher =
          dataClient.newBulkMutationBatcher(TableId.of(tableId))) {
        ServerStream<Row> rows = dataClient.readRows(Query.create(TableId.of(tableId)));
        for (Row row : rows) {
          batcher.add(
              RowMutationEntry.create(row.getKey()).deleteCells("cell_plan", "data_plan_05gb"));
        }
        // Blocks until mutations are applied on all submitted row entries.
        batcher.flush();
      }
    }
  }
}

Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

def streaming_and_batching(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    batcher = table.mutations_batcher(flush_count=2)
    rows = table.read_rows()
    for row in rows:
        row = table.row(row.row_key)
        row.delete_cell(column_family_id="cell_plan", column="data_plan_01gb")

    batcher.mutate_rows(rows)

asyncio de Python

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

async def streaming_and_batching(project_id, instance_id, table_id):
    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    async with table.mutations_batcher() as batcher:
        async for row in await table.read_rows_stream(ReadRowsQuery(limit=10)):
            await batcher.append(
                RowMutationEntry(
                    row.row_key,
                    DeleteRangeFromColumn(
                        family="cell_plan", qualifier=b"data_plan_01gb"
                    ),
                )
            )

    await table.close()
    await client.close()

Node.js

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

const rows = (await table.getRows({limit: 2}))[0];
const entries = rows.map(row => {
  return {
    key: row.id,
    method: 'delete',
    data: {
      column: 'cell_plan:data_plan_05gb',
    },
  };
});
await table.mutate(entries);
await printRows();

Borra datos en una vista autorizada

Puedes borrar datos de la tabla enviando una solicitud de eliminación a un vista autorizada. Debes usar una de las siguientes opciones:

  • gcloud CLI
  • Cliente de Bigtable para Java

Cuando borras datos de una vista autorizada, proporcionas el el ID de la vista autorizada, además del ID de la tabla.

Los datos que puedes borrar de una vista autorizada están limitados por las definición de vista autorizada. Solo puedes borrar los datos que están incluidos en la vista autorizada. Si intentas borrar datos que están fuera de la definición de vista autorizada o está sujeta a las siguientes reglas, un se muestra el siguiente error de PERMISSION_DENIED:

  • Borrar un rango de filas de una vista autorizada con DropRowRange en la API de Admin.
  • No se puede borrar de una fila.
  • Se puede borrar de una columna, siempre y cuando sea para las filas que se encuentran en vista autorizada.
  • Solo se permite borrar datos de una familia de columnas si la familia de columnas especificada está configurado para permitir todos los prefijos del calificador de columna (qualifier_prefixes="") en la vista autorizada.

Por ejemplo, si intentas eliminar de una fila específica, y esa fila contiene columnas en la tabla subyacente que no están en tu en una vista autorizada, la solicitud falla.

¿Qué sigue?