Einführung in partitionierte Tabellen

Diese Seite bietet einen Überblick über die Unterstützung partitionierter Tabellen in BigQuery.

Bei einer partitionierten Tabelle handelt es sich um eine spezielle Tabelle, die in Segmente, die als Partitionen bezeichnet werden, unterteilt ist, wodurch sich die Daten einfacher verwalten und abfragen lassen. Durch das Unterteilen einer großen Tabelle in kleinere Partitionen können die Abfrageleistung gesteigert und die Kosten unter Kontrolle gehalten werden, da so die Anzahl der von einer Abfrage gelesenen Bytes verringert wird.

In BigQuery gibt es zwei Arten der Tabellenpartitionierung:

  • Nach Aufnahmezeit partitionierte Tabellen: Tabellen, die basierend auf dem Aufnahmedatum (Ladedatum) oder dem Eingangsdatum der Daten partitioniert sind.
  • Nach Datum/Zeit partitionierte Tabellen: Tabellen, die auf der Grundlage einer TIMESTAMP- oder DATE-Spalte partitioniert sind.

Nach Aufnahmezeit partitionierte Tabellen

Wenn Sie eine Tabelle erstellen, die nach Aufnahmezeit partitioniert ist, lädt BigQuery automatisch Daten in tägliche datumsbasierte Partitionen, die das Aufnahme- oder Eingangsdatum der Daten widerspiegeln. Mit Pseudospalten- und Suffix-Bezeichnern können Sie Daten korrigieren (ersetzen) und an Partitionen für einen bestimmten Tag weiterleiten.

Nach Aufnahmezeit partitionierte Tabellen beinhalten eine Pseudospalte mit dem Namen _PARTITIONTIME, die einen datumsbasierten Zeitstempel für die Daten, die in die Tabelle geladen werden, enthält. Abfragen für nach Aufnahmezeit partitionierte Tabellen können die gelesenen Daten durch _PARTITIONTIME-Filter beschränken, die den Speicherort einer Partition abbilden. Alle Daten in der angegebenen Partition werden von der Abfrage gelesen, der Prädikatfilter _PARTITIONTIME beschränkt jedoch die Anzahl der Partitionen, die gescannt werden.

Wenn Sie nach Aufnahmezeit partitionierte Tabellen erstellen, haben die Partitionen die gleiche Schemadefinition wie die Tabelle. Wenn Sie Daten in eine Partition mit einem Schema laden müssen, das nicht mit dem Schema der Tabelle übereinstimmt, müssen Sie das Schema der Tabelle vor dem Laden der Daten aktualisieren. Alternativ können Sie Schema-Aktualisierungsoptionen verwenden, um das Schema der Tabelle im Rahmen eines Lade- oder Abfragejobs zu aktualisieren.

Nach Datum oder Zeitstempel partitionierte Tabellen

BigQuery erlaubt auch partitionierte Tabellen, die auf einer bestimmten DATE- oder TIMESTAMP-Spalte basieren. Anhand des Datumswerts der Partitionierungsspalte (ausgedrückt in UTC) werden Daten, die in eine nach Datum/Zeitstempel partitionierte Tabelle geschrieben werden, automatisch an die entsprechende Partition gesendet.

Für nach Datum/Zeitstempel partitionierte Tabellen ist keine Pseudospalte _PARTITIONTIME erforderlich. Abfragen für nach Datum/Zeitstempel partitionierte Tabellen können gemäß der Partitionierungsspalte Prädikatfilter angeben, um die Menge der gescannten Daten zu verringern.

Beim Erstellen von nach Datum/Zeitstempel partitionierten Tabellen werden zwei besondere Partitionen erstellt:

  • Die Partition __NULL__ bildet Zeilen mit NULL-Werten in der Partitionierungsspalte ab.
  • Die Partition __UNPARTITIONED__ bildet Daten ab, die außerhalb des zulässigen Zeitraums existieren.

Mit Ausnahme der Partitionen __NULL__ und __UNPARTITIONED__ stimmen alle Daten in der Partitionierungsspalte mit dem Datum des Partitionsbezeichners überein. Dadurch kann eine Abfrage ermitteln, welche Partitionen keine Daten enthalten, die die Filterbedingungen erfüllen. Abfragen, die Daten nach der Partitionierungsspalte filtern, können Werte beschränken und unnötige Partitionen vollständig löschen.

Unterschiede zwischen Partitionierung und Fragmentierung

Als Alternative zu partitionierten Tabellen können Sie Tabellen auch anhand einer zeitbasierten Benennung wie z. B. [PREFIX]_YYYYMMDD fragmentieren. Dies wird als "nach Datum fragmentierte Tabellen erstellen" bezeichnet. Mit Standard-SQL oder Legacy-SQL können Sie eine Abfrage mit einem UNION-Operator formulieren, um die Tabellen einzuschränken, die von der Abfrage gescannt werden.

Partitionierte Tabellen bieten eine bessere Leistung als Tabellen, die nach Datum fragmentiert sind. Bei datumsbenannten Tabellen muss BigQuery für jede dieser Tabellen eine Kopie des Schemas und der Metadaten aufbewahren. Außerdem muss BigQuery möglicherweise für jede abgefragte datumsbenannte Tabelle die Berechtigungen überprüfen. Dieser Mehraufwand bei der Abfragedurchführung wirkt sich direkt auf die Abfrageleistung aus. Die bewährte Vorgehensweise besteht darin, nach Möglichkeit partitionierte Tabellen anstelle von nach Datum fragmentierten Tabellen zu verwenden.

Partitionierungsoptionen im Vergleich

In der folgenden Tabelle werden fragmentierte Tabellen und partitionierte Tabellen verglichen.

Funktion Fragmentierte Tabellen Nach Aufnahmezeit partitionierte Tabellen Partitionierte Tabellen
Partitionierungsmethode Keine. Die Partitionierung kann jedoch durch Fragmentieren und Abfragen der Tabellen mit dem Operator UNION simuliert werden. Partitioniert anhand des Aufnahme- oder Eingangsdatums der Daten. Auf die Partitionsinformationen kann mit einer Pseudospalte verwiesen werden. Partitioniert anhand der Daten in der Spalte TIMESTAMP oder DATE.
Partitionsbezeichner Es kann ein beliebiges gültiges Datum zwischen 0001-01-01 und 9999-12-31 verwendet werden. DML-Anweisungen können jedoch nicht auf Daten vor 1970-01-01 oder nach 2159-12-31 verweisen. Ein gültiger Eintrag aus der verknüpften Spalte DATE oder TIMESTAMP. Derzeit werden Datumswerte vor 1960-01-01 und nach 2159-12-31 in einer gemeinsamen Partition UNPARTITIONED abgelegt. NULL-Werte befinden sich in einer expliziten NULL-Partition.
Beschränkung gescannter Daten Verweisen Sie nur auf die benötigten Fragmente und beschränken Sie die Daten, indem Sie unnötige Spalten von der Abfrage ausschließen. Verwenden Sie die Pseudospalte _PARTITIONTIME, um Partitionen zu löschen. Verwenden Sie Prädikatfilter für die Partitionierungsspalte.
Anzahl der Partitionen Die Anzahl der Tabellen ist unbeschränkt, Abfragen können jedoch nur bis zu 1.000 Tabellen referenzieren. Bis zu 4.000 Partitionen. Bis zu 4.000 Partitionen.
Aktualisierungsvorgänge Es sind maximal 1.000 Aktualisierungen pro Tag zulässig. Mit einem einzelnen Vorgang kann eine einzelne Partition aktualisiert werden. Dies ist entweder die neueste Partition (Standard) oder eine Partition, die mit einem Partitions-Decorator wie z. B. [TABLE]$[DATE] festgelegt wird. Mit einem einzelnen Vorgang können Daten in bis zu 2.000 verschiedenen Partitionen aktualisiert werden.
Streaming-Insert-Anweisungen Ein globaler Puffer für die Tabelle. Basierend auf der aktuellen UTC-Zeit können Sie mit Partitions-Suffixen innerhalb der letzten 31 Tage in der Vergangenheit und 16 Tage in der Zukunft ausgehend vom aktuellen Datum auf Partitionen streamen. Sie können Daten zwischen einem Jahr in der Vergangenheit und sechs Monaten in der Zukunft streamen. Daten außerhalb dieses Bereichs werden abgelehnt. Wenn die Daten gestreamt werden, werden sie zwischen sieben Tagen in der Vergangenheit und drei Tagen in der Zukunft in den Streamingpuffer gestellt und dann in die entsprechenden Partitionen extrahiert. Daten außerhalb dieses Zeitraums (aber innerhalb von einem Jahr/sechs Monaten) werden in der Partition UNPARTITIONED gespeichert. Wenn genügend nicht partitionierte Daten vorhanden sind, werden sie in die entsprechenden Partitionen geladen.
Auswertung der Zeitzone Wird durch die Nutzersemantik definiert. UTC UTC

Kontingente und Beschränkungen partitionierter Tabellen

Partitionierte Tabellen unterliegen in BigQuery definierten Beschränkungen.

Kontingente und Beschränkungen gelten auch für die verschiedenen Arten von Jobs, die für partitionierte Tabellen ausgeführt werden können, einschließlich:

Weitere Informationen zu allen Kontingenten und Limits finden Sie unter Kontingente und Limits.

Preise für partitionierte Tabellen

Die Kosten für die Erstellung und Verwendung von partitionierten Tabellen in BigQuery richten sich nach der Menge der in den Partitionen gespeicherten Daten und danach, welche Abfragen für die Daten ausgeführt werden.

  • Informationen zu den Preisen für Speicher finden Sie unter Speicherpreise.
  • Informationen zu den Preisen für Abfragen finden Sie unter Abfragepreise.

Viele Vorgänge für partitionierte Tabellen sind kostenlos, einschließlich Laden von Daten in Partitionen, Kopieren von Partitionen und Datenexport aus Partitionen. Obwohl diese Vorgänge kostenlos sind, unterliegen sie den Kontingenten und Beschränkungen von BigQuery. Weitere Informationen zu allen kostenlosen Vorgängen finden Sie auf der Seite "Preise" unter Kostenlose Vorgänge.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...