Datentyp-Erzwingung in Bigtable

Mit dem flexiblen Schema von Bigtable können Sie Daten beliebigen Typs – Strings, Datumsangaben, Zahlen, JSON-Dokumente oder sogar Bilder oder PDFs – in einer Bigtable-Tabelle speichern.

In diesem Dokument wird beschrieben, wann Bigtable den Typ erzwingt und Sie ihn in Ihrem Anwendungscode codieren oder decodieren müssen. Eine Liste der Bigtable-Datentypen finden Sie in der Data API-Referenzdokumentation unter Typ.

Erzwungene Typen

Der Datentyp wird für die folgenden Daten erzwungen:

  • Aggregatspaltenfamilien (Zähler)
  • Zeitstempel
  • Materialisierte Ansichten

Aggregate

Für den Datentyp Aggregat hängt die Codierung vom Aggregationstyp ab. Wenn Sie eine Aggregatspaltenfamilie erstellen, müssen Sie einen Aggregationstyp angeben.

In dieser Tabelle sind der Eingabetyp und die Codierung für jeden Aggregationstyp aufgeführt.

Aggregationstyp Eingabetyp Codierung
Summe Int64 BigEndianBytes
Min. Int64 BigEndianBytes
Max. Int64 BigEndianBytes
HLL Byte Zetasketch HLL++

Wenn Sie die Daten in Aggregatzellen mit SQL abfragen, werden Typinformationen automatisch in SQL aufgenommen.

Wenn Sie die Daten in Aggregatzellen mit der Methode ReadRows der Data API lesen, gibt Bigtable Byte zurück. Ihre Anwendung muss die Werte also mit der Codierung decodieren, die Bigtable verwendet hat, um die typisierten Daten Byte zuzuordnen.

Sie können eine Spaltenfamilie, die keine Aggregatdaten enthält, nicht in eine Aggregatspaltenfamilie umwandeln. Spalten in Aggregatspaltenfamilien dürfen keine Nicht-Aggregatzellen enthalten und Standardspaltenfamilien dürfen keine Aggregatzellen enthalten.

Weitere Informationen zum Erstellen von Tabellen mit Aggregatspaltenfamilien finden Sie unter Tabelle erstellen. Codebeispiele die zeigen, wie Sie eine Aggregatzelle mit codierten Werten erhöhen, finden Sie unter Wert erhöhen.

Zeitstempel

Jede Bigtable-Zelle hat einen Int64-Zeitstempel, der ein Mikrosekundenwert mit maximal Millisekunden-Genauigkeit sein muss. Bigtable lehnt einen Zeitstempel mit Mikrosekunden-Genauigkeit ab, z. B. 3023483279876543. In diesem Beispiel ist der zulässige Zeitstempelwert 3023483279876000. Ein Zeitstempel ist die Anzahl der Mikrosekunden seit der Unix Epoche, 1970-01-01 00:00:00 UTC.

Kontinuierliche materialisierte Ansichten

Kontinuierliche materialisierte Ansichten sind schreibgeschützte Ressourcen, die Sie mit SQL oder einem ReadRows Data API-Aufruf lesen können. Die Daten in einer materialisierten Ansicht werden basierend auf der Abfrage typisiert, die sie definiert. Eine Übersicht finden Sie unter Kontinuierliche materialisierte Ansichten.

Wenn Sie eine kontinuierliche materialisierte Ansicht mit SQL abfragen, werden Typinformationen automatisch in SQL aufgenommen.

Wenn Sie Daten aus einer kontinuierlichen materialisierten Ansicht mit einer ReadRows ReadRows Anfrage der Data API lesen, müssen Sie den Typ jeder Spalte kennen und ihn in Ihrem Anwendungscode decodieren.

Aggregierte Werte in einer kontinuierlichen materialisierten Ansicht werden mit der in der folgenden Tabelle beschriebenen Codierung gespeichert, basierend auf dem Ausgabetyp der Spalte aus der Ansichtsdefinition.

Typ Codierung
BOOL 1-Byte-Wert, 1 = true, 0 = false
BYTES Keine Codierung
INT64 (oder INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) 64-Bit-Big-Endian
FLOAT64 64-Bit-IEEE 754, ohne NaN und +/-inf
STRING UTF-8
TIME/TIMESTAMP 64-Bit-Ganzzahl, die die Anzahl der Mikrosekunden seit der Unix-Epoche darstellt (entspricht GoogleSQL)
Weitere Informationen finden Sie in der Data API-Referenz unter Codierung.

Strukturierte Zeilenschlüssel

Mit strukturierten Zeilenschlüsseln können Sie auf Ihre Daten mit mehrspaltigen Schlüsseln zugreifen, ähnlich wie bei zusammengesetzten Schlüsseln in relationalen Datenbanken.

Der Typ und die Codierung für strukturierte Zeilenschlüssel werden durch ein Zeilenschlüsselschema definiert, das Sie optional einer Bigtable-Tabelle hinzufügen können. Strukturierte Zeilenschlüsseldaten werden als Byte gespeichert. GoogleSQL für Bigtable verwendet jedoch automatisch den Typ und die Codierung, die im Zeilenschlüsselschema definiert sind, wenn Sie eine SQL-Abfrage für die Tabelle ausführen.

Die Verwendung eines Zeilenschlüsselschemas zum Abfragen einer Tabelle mit einer ReadRows-Anfrage wird nicht unterstützt. Eine kontinuierliche materialisierte Ansicht hat standardmäßig ein Zeilenschlüsselschema. Weitere Informationen zu strukturierten Zeilenschlüsseln finden Sie unter Zeilenschlüsselschemas verwalten.

Nicht erzwungene Typen

Wenn keine Typinformationen angegeben sind, behandelt Bigtable jede Zelle als Byte mit einer unbekannten Codierung.

Wenn Sie Spaltenfamilien abfragen, die ohne Typ-Erzwingung erstellt wurden, müssen Sie zur Lesezeit Typinformationen angeben, damit die Daten korrekt gelesen werden. Dies ist bei Datenbankfunktionen relevant, deren Verhalten vom Datentyp abhängt. GoogleSQL für Bigtable bietet CAST Funktionen, um Typkonvertierungen zur Abfragezeit durchzuführen. Mit diesen Funktionen werden Byte in die Typen konvertiert, die von verschiedenen Funktionen erwartet werden.

Obwohl Bigtable keine Typen erzwingt, wird bei bestimmten Vorgängen ein Datentyp vorausgesetzt. Wenn Sie dies wissen, können Sie sicherstellen, dass Ihre Daten so geschrieben werden, dass sie in der Datenbank verarbeitet werden können. Hier einige Beispiele:

  • Bei Erhöhungen mit ReadModifyWriteRow wird davon ausgegangen, dass die Zelle eine vorzeichenbehaftete 64-Bit-Ganzzahl im Big-Endian-Format enthält.
  • Die Funktion TO_VECTOR64 in SQL erwartet, dass die Zelle ein Byte-Array enthält, das eine Verkettung der Big-Endian-Byte von 64-Bit-Gleitkommazahlen ist.
  • Die Funktion TO_VECTOR32 in SQL erwartet, dass die Zelle ein Byte-Array enthält, das eine Verkettung der Big-Endian-Byte von 32-Bit-Gleitkommazahlen ist.

Nächste Schritte