Eliminazioni

Questo documento descrive come eliminare i dati archiviati in Bigtable tabelle, spiega quando è opportuno utilizzare ciascun approccio e fornisce esempi. Prima di leggere questa pagina, dovresti acquisire familiarità con Bigtable panoramica e comprendere i concetti coinvolti nello schema la progettazione.

Per coerenza, le descrizioni in questa pagina fanno riferimento ai metodi API utilizzate per ogni tipo di richiesta. Tuttavia, ti consigliamo vivamente di usa uno dei client Bigtable biblioteche per accedere alle API Bigtable anziché utilizzare REST o RPC.

Negli esempi in questa pagina vengono utilizzati dati di esempio simili a quelli archiviati in Bigtable.

Per conoscere il numero di volte in cui è possibile utilizzare le operazioni descritte in questo al giorno, consulta la sezione Quote e limiti.

In che modo Bigtable elimina i dati

Quando invii una richiesta di eliminazione, le celle vengono contrassegnate per l'eliminazione e non possono essere lette. I dati vengono rimossi fino a una settimana dopo durante compaction, un processo in background che ottimizza continuamente la tabella. I metadati di eliminazione possono portare i tuoi dati a prendere (diverse kB per riga) per alcuni giorni dopo l'invio di un di eliminazione, fino alla successiva compattazione.

Puoi sempre inviare una richiesta di eliminazione, anche se il cluster ha superato il del limite di archiviazione e le operazioni di lettura e scrittura sono bloccate.

Elimina un intervallo di righe

Se vuoi eliminare una grande quantità di dati archiviati in righe contigue, utilizza dropRowRange. Questa operazione elimina tutte le righe per un intervallo di righe identificate da una riga iniziale e finale o da un prefisso di chiave di riga.

I valori chiave di riga che fornisci quando elimini un intervallo di righe vengono trattate come dati dei servizi. Per informazioni sul modo in cui vengono gestiti i dati dei servizi, consulta l'Informativa sulla privacy di Google Cloud.

Dopo che l'eliminazione è riuscita e hai ricevuto una risposta, puoi: scrivere dati in modo sicuro nello stesso intervallo di righe.

L'operazione dropRowRange prevede le seguenti limitazioni:

  • Non puoi eliminare un intervallo di righe da una vista autorizzata.
  • Non puoi chiamare il metodo dropRowRange in modo asincrono. Se invii un dropRowRange richiesta a una tabella mentre è in corso un'altra richiesta, Bigtable restituisce un errore UNAVAILABLE con il messaggio A DropRowRange operation is already ongoing. Per risolvere l'errore, invia una nuova richiesta.
  • Con le istanze che utilizzano la replica, tieni presente che Bigtable potrebbe richiedere molto tempo per completare l'operazione a causa dell'aumento la latenza di replica e l'utilizzo della CPU. Per eliminare i dati da un'istanza che utilizza di replica, utilizzare l'API di dati per leggere ed eliminare i tuoi dati.

I seguenti esempi di codice mostrano come rilasciare un intervallo di righe che iniziano con il prefisso della chiave di riga phone#5c10102:

Java

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Elimina i dati utilizzando i metodi dell'API di dati

Se devi eliminare piccole quantità di dati non contigui, puoi eliminare i dati utilizzando un metodo che chiama l'API Cloud Bigtable (API di dati) è spesso scelta. Utilizza questi metodi per eliminare i MB di dati in una richiesta, non i GB. Utilizzare l'API di dati è l'unico modo per eliminare i dati da una colonna (non da una colonna) famiglia).

I metodi dell'API di dati chiamano MutateRows con uno dei tre tipi di mutazione:

  • DeleteFromColumn
  • DeleteFromFamily
  • DeleteFromRow

Una richiesta di eliminazione che utilizza l'API di dati è atomica: se l'eliminazione è riuscita, tutti i dati vengono eliminati o la richiesta non va a buon fine e nessun dato viene rimosso.

Nella maggior parte dei casi, evita di utilizzare i metodi CheckAndMutate per eliminare i dati. Nei rari per cui è necessaria un'elevata coerenza, potresti utilizzare questo ma tieni presente che richiede molte risorse e le prestazioni potrebbero interessati.

Per usare MutateRows ed eliminare dati, invia una richiesta readRows con un filtro per determinare cosa eliminare, quindi invii il messaggio di eliminazione richiesta. Per un elenco dei filtri disponibili, vedi Filtri.

I campioni di questa sezione presuppongono che tu abbia già determinato quali dati elimina.

Elimina da una colonna

I seguenti esempi di codice mostrano come eliminare tutte le celle da una colonna di fila:

Java

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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()

Python asincrono

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Elimina da una famiglia di colonne

I seguenti esempi di codice mostrano come eliminare le celle da una famiglia di colonne di fila:

Java

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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()

Python asincrono

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Elimina da una riga

I seguenti snippet di codice mostrano come eliminare tutte le celle da una riga:

Java

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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()

Python asincrono

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Eliminazione tramite flusso e batch

La trasmissione in modalità flusso e batch delle richieste di eliminazione è spesso il modo migliore grandi quantità di dati. Questa strategia può essere utile quando hai a disposizione di conservazione dei dati rispetto a quanto consentito dai criteri di garbage collection.

I seguenti snippet di codice avviano un flusso di dati (lettura righe), raggrupparle in un batch, quindi ripassarle ed eliminare tutte le celle nella colonna data_plan_01gb1 della famiglia di colonne cell_plan:

Java

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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)

Python asincrono

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione su Bigtable, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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();

Eliminare i dati in una vista autorizzata

Per eliminare i dati della tabella, invia una richiesta di eliminazione a un vista autorizzata. Devi utilizzare uno dei seguenti:

  • Interfaccia a riga di comando gcloud
  • Client Bigtable per Java

Quando elimini i dati da una vista autorizzata, fornisci i all'ID vista autorizzata oltre all'ID tabella.

I dati che è possibile eliminare da una vista autorizzata sono limitati dalla definizione della vista autorizzata. Puoi eliminare solo i dati inclusi in la vista autorizzata. Se tenti di eliminare dati al di fuori di la definizione della vista autorizzata o è soggetta alle seguenti regole, viene restituito l'errore PERMISSION_DENIED:

  • Eliminazione di un intervallo di righe da una visualizzazione autorizzata utilizzando DropRowRange nell'API Admin non è supportata.
  • L'eliminazione da una riga non è supportata.
  • L'eliminazione da una colonna è supportata purché riguardi le righe che si trovano nella vista autorizzata.
  • L'eliminazione da una famiglia di colonne è consentita solo se la famiglia di colonne specificata è configurata per consentire tutti i prefissi qualificatore di colonna (qualifier_prefixes="") nella vista autorizzata.

Ad esempio, se tenti di eliminare una riga specificata e questa riga contiene colonne nella tabella sottostante che non sono presenti vista autorizzata, la richiesta non va a buon fine.

Passaggi successivi