Partitionierte Tabellen verwalten

In diesem Dokument erfahren Sie, wie partitionierte Tabellen in BigQuery verwaltet werden. Partitionierte und nach Aufnahmezeit partitionierte Tabellen werden auf die gleiche Weise verwaltet. Sie können die folgenden Verwaltungsaufgaben für partitionierte Tabellen ausführen:

  • Bei einer nach Datum partitionierten Tabelle können Sie folgende Eigenschaften aktualisieren:
    • Beschreibung
    • Tabellenablaufzeit
    • Partitionsablaufzeit
    • Anforderungen an Partitionsfilter
    • Schemadefinition
    • Labels
  • Eine nach Datum partitionierte Tabelle umbenennen (kopieren)
  • Eine nach Datum partitionierte Tabelle kopieren
  • Partitionen kopieren
  • Eine nach Datum partitionierte Tabelle löschen
  • Partitionen in einer nach Datum partitionierten Tabelle löschen

Weitere Informationen zum Erstellen und Verwenden partitionierter Tabellen, darunter auch zum Abrufen von Tabelleninformationen, Auflisten von Tabellen und Steuern des Zugriffs auf Tabellendaten, finden Sie unter Nach Aufnahmezeit partitionierte Tabellen erstellen und aktualisieren oder Partitionierte Tabellen erstellen und verwenden.

Eigenschaften partitionierter Tabellen aktualisieren

Folgende Eigenschaften einer partitionierten Tabelle können Sie aktualisieren:

  • Beschreibung
  • Tabellenablaufzeit
  • Partitionsablaufzeit
  • Schemadefinition
  • Label

Erforderliche Berechtigungen

Zum Aktualisieren von Tabelleneigenschaften benötigen Sie mindestens Berechtigungen des Typs bigquery.tables.update und bigquery.tables.get. Diese vordefinierten IAM-Rollen enthalten die Berechtigungen bigquery.tables.update und bigquery.tables.get:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Wenn ein Nutzer mit Berechtigungen vom Typ bigquery.datasets.create ein Dataset erstellt, hat er dafür außerdem bigquery.dataOwner-Zugriff. bigquery.dataOwner-Zugriff gibt dem Nutzer die Möglichkeit, die Eigenschaften von Tabellen in diesem Dataset zu aktualisieren.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Beschreibung einer partitionierten Tabelle aktualisieren

Der Vorgang zum Aktualisieren der Beschreibung einer partitionierten Tabelle entspricht dem Vorgang zum Aktualisieren der Beschreibung einer Standardtabelle. Informationen dazu, wie Sie die Beschreibung einer Tabelle hinzufügen oder ändern, finden Sie unter Beschreibung einer Tabelle aktualisieren.

Derzeit können Sie keine Beschreibungen für einzelne Partitionen erstellen.

Tabellenablauf aktualisieren

Der Vorgang zum Aktualisieren des Ablaufs einer partitionierten Tabelle entspricht dem Vorgang zum Aktualisieren des Ablaufs einer Standardtabelle. Informationen dazu, wie Sie die Ablaufzeit einer Tabelle hinzufügen oder ändern, finden Sie unter Ablauf einer Tabelle aktualisieren.

Partitionsablauf aktualisieren

Wenn Sie eine Tabelle erstellen, die nach Aufnahmezeit oder nach einer Datums-/Zeitstempelspalte partitioniert ist, können Sie einen Partitionsablauf festlegen. Wenn dieser Wert angegeben ist, überschreibt er die Standardablaufzeit für Partitionen auf Dataset-Ebene. Nach Ganzzahlbereich partitionierte Tabellen unterstützen keine Ablaufzeit der Partition. Weitere Informationen finden Sie unter Nach Aufnahmezeit partitionierte Tabellen erstellen und verwenden und Mit Datum/Zeitstempel partitionierte Tabellen erstellen und verwenden.

Nach dem Erstellen der Tabelle können Sie die Partitionsablaufzeit der Tabelle jederzeit mit dem Befehl bq update des bq-Befehlszeilentools oder der API-Methode tables.patch aktualisieren. Das Aktualisieren des Partitionsablaufs wird von der Cloud Console derzeit nicht unterstützt. Sie können den Partitionsablauf aber auch mit einer DDL-Anweisung in der Cloud Console aktualisieren.

Wenn Sie den Ablauf der Partition einer Tabelle aktualisieren, gilt diese Einstellung für alle Partitionen, unabhängig vom Zeitpunkt ihrer Erstellung.

Wenn Sie die Partitionsablaufzeit einer Tabelle aktualisieren, müssen Sie diese Ablaufzeit ab Mitternacht (UTC) in Bezug auf das Datum der Partition berechnen.

Wenn für die partitionierte Tabelle auch ein Tabellenablauf konfiguriert wurde, werden die Tabelle und alle darin enthaltenen Partitionen gemäß den Ablaufeinstellungen für die Tabelle gelöscht. Der Tabellenablauf hat Vorrang vor dem Ablauf der Partition.

Beispiel: Wenn der Ablauf einer partitionierten Tabelle auf 5 Tage und die Ablaufzeit der Partition auf 7 Tage festgelegt ist, wird die Tabelle mit allen darin enthaltenen Partitionen nach 5 Tagen gelöscht.

Bei Projekten mit partitionierten Tabellen, die vor dem 13. Dezember 2016 erstellt wurden, basiert der Ablauftermin der Partition auf dem Datum ihrer letzten Änderung. Dasselbe gilt auch für neue Tabellen, die in diesen Projekten erstellt werden. Wenn Sie ein Projekt auf das neue Ablaufverhalten umstellen möchten, müssen Sie im BigQuery Issue Tracker (Problemverfolgung) eine entsprechende Anfrage stellen.

So aktualisieren Sie den Partitionsablauf einer partitionierten Tabelle:

SQL

DDL-Anweisungen (Data Definition Language) ermöglichen das Erstellen und Ändern von Tabellen und Ansichten mithilfe der Standard-SQL-Abfragesyntax.

Weitere Informationen finden Sie unter DDL-Anweisungen verwenden.

So aktualisieren Sie den Partitionsablauf einer partitionierten Tabelle mithilfe einer DDL-Anweisung:

  1. Öffnen Sie in der Cloud Console die Seite „BigQuery“.

    Zur Seite "BigQuery"

  2. Klicken Sie auf Neue Abfrage erstellen.

  3. Geben Sie die DDL-Anweisung in den Textbereich des Abfrageeditors ein.

     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       -- Sets partition expiration to 5 days
       partition_expiration_days=5
     )
     

  4. Klicken Sie auf Ausführen.

bq

Führen Sie den Befehl bq update mit dem Flag --time_partitioning_expiration aus. Wenn Sie eine partitionierte Tabelle in einem anderen Projekt als Ihrem Standardprojekt aktualisieren, fügen Sie die Projekt-ID im folgenden Format in den Dataset-Namen ein: project_id:dataset

bq update \
--time_partitioning_expiration integer \
project_id:dataset.table

Dabei gilt:

  • integer ist die Standardlebensdauer (in Sekunden) für die Partitionen der Tabelle. Es gibt keinen Mindestwert. Die Ablaufzeit entspricht dem Datum der Partition plus dem ganzzahligen Wert. Wenn Sie 0 angeben, wird der Partitionsablauf entfernt und die Partition läuft nie ab. Partitionen ohne Ablaufdatum müssen manuell gelöscht werden.
  • project_id ist die Projekt-ID.
  • dataset ist der Name des Datasets, das die zu aktualisierende Tabelle enthält.
  • table ist der Name der Tabelle, die Sie aktualisieren.

Beispiele:

Geben Sie den folgenden Befehl ein, um den Partitionsablauf in mydataset.mytable auf 5 Tage (432000 Sekunden) zu aktualisieren. mydataset befindet sich in Ihrem Standardprojekt.

bq update --time_partitioning_expiration 432000 mydataset.mytable

Geben Sie den folgenden Befehl ein, um den Partitionsablauf in mydataset.mytable auf 5 Tage (432000 Sekunden) zu aktualisieren. mydataset befindet sich in myotherproject, nicht in Ihrem Standardprojekt.

bq update \
--time_partitioning_expiration 432000 \
myotherproject:mydataset.mytable

API

Rufen Sie die Methode tables.patch auf und verwenden Sie das Attribut timePartitioning.expirationMs, um den Partitionsablauf in Millisekunden zu aktualisieren. Da die Methode tables.update die gesamte Tabellenressource ersetzt, ist die Methode tables.patch zu bevorzugen.

Anforderungen an Partitionsfilter aktualisieren

Wenn Sie eine partitionierte Tabelle erstellen, können Sie die Option Partitionsfilter anfordern aktivieren und damit die Verwendung eines Prädikatfilters voraussetzen. Wenn diese Option aktiviert ist, führen Versuche, die partitionierte Tabelle ohne Angabe einer WHERE-Klausel abzufragen, zu diesem Fehler: Cannot query over table 'project_id.dataset.table' without a filter that can be used for partition elimination.

Weitere Informationen zum Einbinden der Option Partitionsfilter anfordern beim Erstellen einer partitionierten Tabelle finden Sie unter Partitionierte Tabellen erstellen.

Wenn Sie die Option Partitionsfilter anfordern beim Erstellen einer partitionierten Tabelle nicht aktiviert haben, können Sie die Tabelle aktualisieren und dies nachholen.

Option "Partitionsfilter anfordern" aktualisieren

So aktualisieren Sie eine partitionierte Tabelle, damit Abfragen erforderlich werden, die eine WHERE-Klausel zur Bereinigung von Partitionen enthalten:

Console

In der Cloud Console können Sie keine Partitionsfilter anfordern, nachdem eine partitionierte Tabelle erstellt wurde.

bq

Wenn Sie eine partitionierte Tabelle mit dem bq-Befehlszeilentool aktualisieren möchten, damit Partitionsfilter erforderlich sind, geben Sie den bq update-Befehl ein und geben Sie das Flag --require_partition_filter an.

Zum Aktualisieren einer partitionierten Tabelle in einem anderen Projekt als Ihrem Standardprojekt fügen Sie dem Dataset die Projekt-ID im folgenden Format hinzu: project_id:dataset.

Beispiel:

Zum Aktualisieren von mypartitionedtable in mydataset in Ihrem Standardprojekt geben Sie Folgendes ein:

bq update --require_partition_filter mydataset.mytable

Zum Aktualisieren von mypartitionedtable in mydataset in myotherproject geben Sie Folgendes ein:

bq update --require_partition_filter myotherproject:mydataset.mytable

API

Rufen Sie die Methode tables.patch auf und setzen Sie das Attribut requirePartitionFilter auf true, um Partitionsfilter erforderlich zu machen. Da die Methode tables.update die gesamte Tabellenressource ersetzt, ist die Methode tables.patch zu bevorzugen.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Java API.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;

// Sample to update require partition filter on a table.
public class UpdateTableRequirePartitionFilter {

  public static void runUpdateTableRequirePartitionFilter() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    updateTableRequirePartitionFilter(datasetName, tableName);
  }

  public static void updateTableRequirePartitionFilter(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Table table = bigquery.getTable(datasetName, tableName);
      table.toBuilder().setRequirePartitionFilter(true).build().update();

      System.out.println("Table require partition filter updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Table require partition filter was not updated \n" + e.toString());
    }
  }
}

Schemadefinition aktualisieren

Der Vorgang zum Aktualisieren der Schemadefinition für eine partitionierte Tabelle entspricht dem Vorgang zum Aktualisieren der Schemadefinition einer Standardtabelle. Weitere Informationen finden Sie unter Tabellenschemas ändern.

Partitionierte Tabelle umbenennen

Der Name einer vorhandenen partitionierten Tabelle kann derzeit nicht geändert werden. Wenn Sie den Tabellennamen ändern möchten, müssen Sie die Tabelle kopieren. Geben Sie im Kopiervorgang als Zieltabelle den neuen Tabellennamen an.

Partitionierte Tabellen kopieren

Einzelne partitionierte Tabelle kopieren

Der Vorgang zum Kopieren einer partitionierten Tabelle entspricht dem Vorgang zum Kopieren einer Standardtabelle. Weitere Informationen finden Sie unter Tabelle kopieren.

Beachten Sie beim Kopieren einer partitionierten Tabelle Folgendes:

  • Die Quell- und Zieltabellen müssen sich in Datasets am selben Standort befinden.

  • Wenn Sie eine partitionierte Tabelle in eine neue partitionierte Zieltabelle kopieren möchten:
    Beim Kopieren einer zeitpartitionierten Tabelle in eine neue Tabelle werden sämtliche Partitionierungsinformationen zusammen mit der Tabelle kopiert. Die neue und die alte Tabelle haben identische Partitionen.
  • Wenn Sie eine nicht partitionierte Tabelle in eine partitionierte Tabelle kopieren möchten:
    Beim Kopieren einer nicht partitionierten Tabelle in eine partitionierte Tabelle kopiert BigQuery die Quelldaten in die Partition, die das aktuelle Datum darstellt.
  • Wenn Sie eine partitionierte Tabelle in eine andere partitionierte Tabelle kopieren möchten:
    Damit eine partitionierte Tabelle in eine andere partitionierte Tabelle kopiert werden kann, müssen die Partitionsspezifikationen der Quell- und Zieltabelle übereinstimmen. Sie können angeben, ob die Tabellendaten an die Zieltabelle angefügt werden sollen oder diese überschrieben werden soll.
  • Wenn Sie eine partitionierte Tabelle in eine nicht partitionierte Tabelle kopieren möchten:
    Wenn Sie eine partitionierte Tabelle in eine nicht partitionierte Tabelle kopieren, behält die Zieltabelle ihren Zustand als nicht partitionierte Tabelle bei. Die Daten werden abhängig von den Einstellungen entweder an die nicht partitionierte Tabelle angehängt oder überschreiben die nicht partitionierte Tabelle.

Mehrere partitionierte Tabellen kopieren

Der Vorgang zum Kopieren mehrerer partitionierter Tabellen entspricht dem Vorgang zum Kopieren mehrerer Standardtabellen. Weitere Informationen finden Sie unter Mehrere Quelltabellen kopieren.

Beachten Sie beim Kopieren mehrerer partitionierter Tabellen Folgendes:

  • Beim Kopieren mehrerer Quelltabellen in eine partitionierte Tabelle im selben Job dürfen die Quelltabellen keine Mischung aus partitionierten und nicht partitionierten Tabellen enthalten.
  • Wenn alle Quelltabellen partitionierte Tabellen sind, müssen die Partitionsspezifikationen aller Quelltabellen mit der Partitionsspezifikation der Zieltabelle übereinstimmen. Über die Einstellungen können Sie bestimmen, ob die Daten an die Zieltabelle angehängt werden oder diese überschrieben wird.
  • Die Quell- und Zieltabellen müssen sich in Datasets am selben Speicherort befinden.

Partitionen kopieren

Sie können eine oder mehrere Partitionen folgendermaßen kopieren:

  • Mit dem Befehl bq cp des bq-Befehlszeilentools
  • Durch Aufrufen der API-Methode jobs.insert und Konfigurieren eines copy-Jobs
  • Mit den Clientbibliotheken

Derzeit wird das Kopieren von Partitionen von der Cloud Console nicht unterstützt.

Erforderliche Berechtigungen

Zum Kopieren von Tabellen und Partitionen benötigen Sie mindestens die folgenden Berechtigungen.

Für das Quell-Dataset:

  • bigquery.tables.get
  • bigquery.tables.getData

Für das Ziel-Dataset:

  • bigquery.tables.create zum Erstellen einer Kopie der Tabelle oder Partition im Ziel-Dataset

Diese vordefinierten IAM-Rollen enthalten die Berechtigungen bigquery.tables.create, bigquery.tables.get und bigquery.tables.getData:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Zum Ausführen des Kopierjobs brauchen Sie außerdem Berechtigungen des Typs bigquery.jobs.create.

Die folgenden vordefinierten IAM-Rollen enthalten bigquery.jobs.create-Berechtigungen:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Wenn ein Nutzer mit Berechtigungen vom Typ bigquery.datasets.create ein Dataset erstellt, hat er dafür außerdem bigquery.dataOwner-Zugriff. Mit bigquery.dataOwner-Zugriff kann der Nutzer Tabellen und Partitionen im Dataset kopieren. Zugriff auf das Ziel-Dataset ist jedoch weiterhin erforderlich, sofern der Nutzer nicht auch das Ziel-Dataset erstellt hat.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Einzelne Partition kopieren

Console

Das Kopieren von Partitionen wird von der Cloud Console nicht unterstützt.

bq

Zum Kopieren einer Partition geben Sie im bq-Befehlszeilentool den Befehl bq cp (copy) mit einem Partitions-Decorator ($date) wie etwa $20160201 ein.

Sie können zusätzliche Flags verwenden, um die Schreibanordnung der Zielpartition zu steuern:

  • Mit -a oder --append_table werden die Daten aus der Quellpartition an eine vorhandene Tabelle oder Partition im Ziel-Dataset angefügt.
  • -f oder --force überschreibt eine vorhandene Tabelle oder Partition im Ziel-Dataset, ohne eine Bestätigung von Ihnen anzufordern.
  • -n oder --no_clobber geben folgende Fehlermeldung zurück, wenn die Tabelle oder Partition im Ziel-Dataset vorhanden ist: Table '<var>project_id:dataset.table</var> or <var>table$date</var>' already exists, skipping.. Wenn -n nicht angegeben wird, werden Sie standardmäßig aufgefordert, anzugeben, ob die Zieltabelle oder -partition ersetzt werden soll.
  • --destination_kms_key ist der vom Kunden verwaltete Cloud KMS-Schlüssel, der zum Verschlüsseln der Zieltabelle oder -partition verwendet wird.

Der Befehl cp unterstützt die Flags --time_partitioning_field oder --time_partitioning_type nicht. Sie können eine nach Datum partitionierte Tabelle nicht mithilfe eines Kopierjobs in eine partitionierte Tabelle konvertieren.

--destination_kms_key wird hier nicht angewendet. Weitere Informationen finden Sie unter Daten mit Cloud KMS-Schlüsseln schützen.

Wenn sich das Quell- oder Ziel-Dataset in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie die Projekt-ID im folgenden Format dem Dataset-Namen hinzu: project_id:dataset.

Optional: Geben Sie das Flag --location an und legen Sie als Wert Ihren Standort fest.

bq --location=location cp \
-a -f -n \
project_id:dataset.source_table$source_partition \
project_id:dataset.destination_table$destination_partition

Wobei:

  • location ist der Name Ihres Standorts. Das Flag --location ist optional. Wenn Sie BigQuery z. B. in der Region Tokio verwenden, können Sie für das Flag den Wert asia-northeast1 festlegen. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.
  • project_id ist die Projekt-ID.
  • dataset ist der Name des Quell- oder Ziel-Datasets.
  • source_table ist die kopierte Tabelle.
  • source_partition ist der Partitions-Decorator der Quellpartition.
  • destination_table ist der Name der Tabelle im Ziel-Dataset.
  • destination_partition ist der Partitions-Decorator der Zielpartition.

Beispiele:

Partition in eine neue Tabelle kopieren

Mit dem folgenden Befehl kopieren Sie die Partition vom 30. Januar 2018 aus mydataset.mytable in die neue Tabelle – mydataset.mytable2. mydataset befindet sich in Ihrem Standardprojekt.

bq cp -a 'mydataset.mytable$20180130' mydataset.mytable2

Partition in eine nicht partitionierte Tabelle kopieren

Mit dem folgenden Befehl kopieren Sie die Partition vom 30. Januar 2018 aus mydataset.mytable in eine nicht partitionierte Tabelle – mydataset2.mytable2. Mit der Tastenkombination -a werden die Daten der Partition an die nicht partitionierte Zieltabelle angehängt. Beide Datasets befinden sich in Ihrem Standardprojekt.

bq cp -a 'mydataset.mytable$20180130' mydataset2.mytable2

Mit dem folgenden Befehl kopieren Sie die Partition vom 30. Januar 2018 aus mydataset.mytable in eine nicht partitionierte Tabelle – mydataset2.mytable2. Die Tastenkombination -f wird verwendet, damit die nicht partitionierte Zieltabelle ohne Bestätigungsaufforderung überschrieben wird.

bq --location=US cp -f 'mydataset.mytable$20180130' mydataset2.mytable2

Partition in eine partitionierte Tabelle kopieren

Mit dem folgenden Befehl kopieren Sie die Partition vom 30. Januar 2018 aus mydataset.mytable in eine andere partitionierte Tabelle – mydataset2.mytable2. Die Tastenkombination -a dient zum Anhängen der Daten der Partition an die Zieltabelle. Da für die Zieltabelle kein Partitions-Decorator angegeben ist, wird der Schlüssel der Quellpartition beibehalten und die Daten werden in der Zieltabelle in die Partition vom 30. Januar 2018 kopiert. Sie können auch einen Partitions-Decorator in der Zieltabelle angeben, um Daten in eine bestimmte Partition zu kopieren. mydataset befindet sich in Ihrem Standardprojekt. mydataset2 ist nicht im Standardprojekt, sondern in myotherproject enthalten.

bq --location=US cp \
-a \
'mydataset.mytable$20180130' \
myotherproject:mydataset2.mytable2

Mit dem folgenden Befehl kopieren Sie die Partition vom 30. Januar 2018 aus mydataset.mytable in die Partition vom 20. Februar 2018 einer anderen partitionierten Tabelle – mydataset2.mytable2. Mit der Tastenkombination -f wird die Partition vom 20. Februar 2018 in der Zieltabelle ohne Eingabeaufforderung überschrieben. Wenn kein Partitions-Decorator verwendet wird, werden alle Daten in der Zieltabelle überschrieben. mydataset befindet sich in Ihrem Standardprojekt. mydataset2 befindet sich nicht in Ihrem Standardprojekt, sondern in myotherproject.

bq cp \
-f \
'mydataset.mytable$20180130' \
'myotherproject:mydataset2.mytable2$20180220'

Mit dem folgenden Befehl kopieren Sie die Partition vom 30. Januar 2018 aus mydataset.mytable in eine andere partitionierte Tabelle – mydataset2.mytable2. mydataset befindet sich in Ihrem Standardprojekt. mydataset2 ist nicht im Standardprojekt, sondern in myotherproject enthalten. Wenn sich in der Zieltabelle Daten befinden, werden Sie standardmäßig zum Überschreiben aufgefordert.

bq cp \
'mydataset.mytable$20180130' \
myotherproject:mydataset2.mytable2

API

Rufen Sie die Methode jobs.insert auf und konfigurieren Sie einen copy-Job. (Optional:) Geben Sie Ihren Standort im Attribut location im Abschnitt jobReference der Jobressource an.

In der Jobkonfiguration geben Sie die folgenden Attribute an:

  • Im Attribut sourceTables geben Sie das Quell-Dataset, die Quelltabelle und die Quellpartition ein.
  • Im Attribut destinationTable geben Sie das Ziel-Dataset und die Zieltabelle ein.
  • Mit dem Attribut writeDisposition geben Sie an, ob die Zieltabelle bzw. die Zielpartition angehängt oder überschrieben werden soll.

Mehrere Partitionen kopieren

So kopieren Sie mehrere Partitionen:

Console

Derzeit wird das Kopieren von Partitionen von der Cloud Console nicht unterstützt.

bq

Für das Kopieren mehrerer Partitionen gilt die gleiche Vorgehensweise wie für das Kopieren einer einzelnen Partition. Sie geben in diesem Fall jedoch mehrere Quellpartitionen in Form einer durch Kommas getrennten Liste an:

bq cp \
'mydataset.mytable$20180130,mydataset.mytable$20180131' \
myotherproject:mydataset.mytable2

API

Rufen Sie die Methode jobs.insert auf und konfigurieren Sie einen copy-Job. Geben Sie Ihre Region im Attribut location im Abschnitt jobReference der Jobressource an.

In der Jobkonfiguration geben Sie die folgenden Attribute an:

  • Im Attribut sourceTables geben Sie mehrere Quellpartitionen (einschließlich Name des Datasets und der Tabelle) ein.
  • Im Attribut destinationTable geben Sie das Ziel-Dataset und die Zieltabelle ein.
  • Mit dem Attribut writeDisposition geben Sie an, ob die Zieltabelle bzw. die Zielpartition angehängt oder überschrieben werden soll.

Partitionierte Tabelle löschen

Der Vorgang zum Löschen einer nach Datum partitionierten Tabelle inklusive der darin enthaltenen Partitionen entspricht dem Vorgang zum Löschen einer Standardtabelle. Informationen zum Löschen einer Tabelle finden Sie unter Tabellen löschen.

Partitionen partitionierter Tabellen löschen

Sie können Partitionen in partitionierten Tabellen mit dem bq rm-Befehl des bq-Befehlszeilentools oder durch Aufrufen der API-Methode tables.delete löschen.

Sie können den Partitions-Decorator verwenden, um eine bestimmte Partition zu löschen. Im folgenden Beispiel kann die Partition für den 1. März 2016 ($20160301) in einer partitionierten Tabelle namens mydataset.mytable mit dem folgenden Befehl gelöscht werden:

bq rm 'mydataset.mytable$20160301'

Informationen zum Abrufen einer Liste von Partitionen in einer partitionierten Tabelle finden Sie unter Partitionen in nach Aufnahmezeit partitionierten Tabellen auflisten oder Partitionen in partitionierten Tabellen auflisten.

Derzeit können Sie nur jeweils eine Partition löschen.

Erforderliche Berechtigungen

Zum Löschen einer Partition benötigen Sie mindestens die Berechtigungen bigquery.tables.delete und bigquery.tables.get. Diese vordefinierten IAM-Rollen enthalten die Berechtigungen bigquery.tables.delete und bigquery.tables.get:

  • bigquery.dataOwner
  • bigquery.dataEditor
  • bigquery.admin

Wenn ein Nutzer mit Berechtigungen vom Typ bigquery.datasets.create ein Dataset erstellt, hat er dafür außerdem bigquery.dataOwner-Zugriff. Mit bigquery.dataOwner-Zugriff kann der Nutzer Tabellen und Partitionen im Dataset löschen.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Partition einer partitionierten Tabelle löschen

Durch Angeben des Partitions-Decorators können Sie eine Partition löschen, sofern es sich nicht um eine der beiden besonderen Partitionen handelt. Derzeit können die Partitionen __NULL__ und __UNPARTITIONED__ nicht gelöscht werden.

So löschen Sie eine Partition einer partitionierten Tabelle:

Console

Das Löschen von Partitionen wird von der Cloud Console nicht unterstützt.

bq

Verwenden Sie den Befehl bq rm mit dem Flag --table (oder die Kurzform -t) und verweisen auf den Partitions-Decorator ($date), um eine bestimmte Partition aus einer partitionierten Tabelle zu löschen. Wenn Sie eine Partition mit dem bq-Befehlszeilentool entfernen, müssen Sie die Aktion bestätigen. Sie können das Flag --force (oder das Kürzel -f) zum Überspringen der Bestätigung verwenden.

Wenn die partitionierte Tabelle in einem Dataset eines anderen Projekts als dem Standardprojekt enthalten ist, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: project_id:dataset.

bq rm -f -t project_id:dataset.table$date

Dabei gilt:

  • project_id ist die Projekt-ID.
  • dataset ist der Name des Datasets, das die Tabelle enthält.
  • table ist der Name der Tabelle.
  • $date ist der Partitions-Decorator der zu löschenden Partition.

Beispiele:

Geben Sie den folgenden Befehl ein, um die Partition für den 1. März 2016 ($20160301) aus einer partitionierten Tabelle namens mydataset.mytable zu löschen. mydataset befindet sich in Ihrem Standardprojekt.

bq rm 'mydataset.mytable$20160301'

Geben Sie den folgenden Befehl ein, um die Partition für den 1. Januar 2017 ($20170101) aus einer partitionierten Tabelle mit dem Namen mydataset.mytable zu löschen. mydataset ist nicht im Standardprojekt, sondern in myotherproject enthalten.

bq rm 'myotherproject:mydataset.mytable$20170101'

Geben Sie den folgenden Befehl ein, um die Partition für den 18. Januar 2018 ($20180118) aus einer partitionierten Tabelle mit dem Namen mydataset.mytable zu löschen. mydataset ist nicht im Standardprojekt, sondern in myotherproject enthalten. Mit der Flag-Kurzform -f wird die Bestätigung übersprungen.

bq rm -f 'myotherproject:mydataset.mytable$20180118'

API

Rufen Sie die Methode tables.delete auf und legen Sie mit dem Parameter tableId die Tabelle und den Partitions-Decorator fest.