Konversionsregeln

Die Umwandlung umfasst unter anderem das Umwandeln, Erzwingen und Supertyping.

  • Das Umwandeln ist eine explizite Konversion, für die die Funktion CAST() verwendet wird.
  • Erzwingen ist eine von BigQuery unter nachfolgend beschriebenen Bedingungen automatisch durchgeführte implizite Konversion.
  • Ein Supertyp ist ein gemeinsamer Typ, in den zwei oder mehr Ausdrücke erzwungen werden können.

Außerdem gibt es Konversionen mit eigenen Funktionsnamen, z. B. PARSE_DATE(). Weitere Informationen zu diesen Funktionen finden Sie unter Konversionsfunktionen.

Umwandeln und Erzwingen im Vergleich

In der folgenden Tabelle sind alle möglichen Umwandlungs- und Erzwingungsmöglichkeiten für BigQuery-Datentypen zusammengefasst. Die Spalte Erzwingen in gilt für alle Ausdrücke eines bestimmten Datentyps (z. B. eine Spalte), Literale und Parameter können jedoch auch erzwungen werden. Weitere Informationen finden Sie unter Literale erzwingen und Parameter erzwingen.

Von Typ Umwandeln in Erzwingen in
INT64 BOOL
INT64
NUMERIC
BIGNUMERIC
FLOAT64
STRING
NUMERIC
BIGNUMERIC
FLOAT64
NUMERIC INT64
NUMERIC
BIGNUMERIC
FLOAT64
STRING
BIGNUMERIC
FLOAT64
BIGNUMERIC INT64
NUMERIC
BIGNUMERIC
FLOAT64
STRING
FLOAT64
FLOAT64 INT64
NUMERIC
BIGNUMERIC
FLOAT64
STRING
 
BOOL BOOL
INT64
STRING
 
STRING BOOL
INT64
NUMERIC
BIGNUMERIC
FLOAT64
STRING
BYTES
DATE
DATETIME
TIME
TIMESTAMP
 
BYTES STRING
BYTES
 
DATE STRING
DATE
DATETIME
TIMESTAMP
DATETIME
DATETIME STRING
DATE
DATETIME
TIME
TIMESTAMP
 
TIME STRING
TIME
 
TIMESTAMP STRING
DATE
DATETIME
TIME
TIMESTAMP
 
ARRAY ARRAY  
STRUCT STRUCT  

Umwandeln

Die meisten Datentypen können mit der Funktion CAST von einem Typ in einen anderen übertragen werden. Bei der Umwandlung (CAST) kann eine Abfrage fehlschlagen, wenn BigQuery die Umwandlung nicht ausführen kann. Wenn Sie Ihre Abfragen vor diesen Fehlern schützen möchten, können Sie SAFE_CAST verwenden. Weitere Informationen zu den Regeln für CAST, SAFE_CAST und andere Umwandlungsfunktionen finden Sie unter Konvertierungsfunktionen.

Erzwingen

BigQuery erzwingt den Ergebnistyp eines Argumentausdrucks als einen anderen Typ, wenn er mit Funktionssignaturen übereinstimmen muss. Wenn beispielsweise die Funktion func() so definiert ist, dass sie ein einzelnes Argument vom Typ FLOAT64 annimmt, und ein Ausdruck als Argument mit einem Ergebnistyp von INT64 verwendet wird, dann wird das Ergebnis des Ausdrucks in den Typ FLOAT64 umgewandelt, bevor func() berechnet wird.

Literale erzwingen

BigQuery unterstützt folgende Literalerzwingungen:

Datentyp der Eingabe Datentyp des Ergebnisses Hinweise
STRING-Literal DATE
DATETIME
TIME
TIMESTAMP

Die Literalerzwingung ist notwendig, wenn sich der tatsächliche Literaltyp von dem von der betreffenden Funktion erwarteten Typ unterscheidet. Wenn die Funktion func() beispielsweise ein DATE-Argument annimmt, ist der Ausdruck func("2014-09-27") gültig, weil die Umwandlung des String-Literals "2014-09-27" in DATE erzwungen wird.

Die Literalumwandlung wird zur Analysezeit ausgewertet und gibt einen Fehler aus, wenn das eingegebene Literal nicht erfolgreich in den Zieltyp konvertiert werden kann.

Parameter erzwingen

BigQuery unterstützt folgende Parametererzwingungen:

Datentyp der Eingabe Datentyp des Ergebnisses
STRING-Parameter DATE
DATETIME
TIME
TIMESTAMP

Kann der Parameterwert nicht erfolgreich als Zieltyp erzwungen werden, wird ein Fehler ausgegeben.

Supertypen

Ein Supertyp ist ein gemeinsamer Typ, in den zwei oder mehr Ausdrücke erzwungen werden können. Supertypen werden mit Satzvorgängen wie UNION ALL und Ausdrücken wie CASE verwendet, die mehrere Argumente mit Übereinstimmungstypen erwarten. Jeder Typ hat einen oder mehrere Supertypen, einschließlich seiner, die seine Gruppe von Supertypen definieren.

Eingabetyp Supertypen
BOOL BOOL
INT64 INT64
FLOAT64
NUMERIC
BIGNUMERIC
FLOAT64 FLOAT64
NUMERIC NUMERIC
BIGNUMERIC
FLOAT64
DECIMAL DECIMAL
BIGDECIMAL
FLOAT64
BIGNUMERIC BIGNUMERIC
FLOAT64
BIGDECIMAL BIGDECIMAL
FLOAT64
STRING STRING
DATE DATE
TIME TIME
DATETIME DATETIME
TIMESTAMP TIMESTAMP
BYTES BYTES
STRUCT STRUCT mit denselben Feldpositionstypen.
ARRAY ARRAY mit denselben Elementtypen.
GEOGRAPHY GEOGRAPHY

Wenn Sie den Supertyp für eine Reihe von Eingabetypen ermitteln möchten, legen Sie zuerst die Schnittmenge der Supertypen für jeden Eingabetyp fest. Wenn dieser Satz leer ist, haben die Eingabetypen keinen gemeinsamen Supertyp. Wenn dieser Satz nicht leer ist, ist der allgemeine Supertyp in der Regel der besondere Typ in diesem Satz. Im Allgemeinen ist der spezifischste Typ der Typ mit der restriktivsten Domain.

Beispiele

Eingabetypen Gemeinsamer Supertyp Rückgabe: Hinweise
INT64
FLOAT64
FLOAT64 FLOAT64 Wenn Sie INT64 und BOOL supertypisieren, ist dies erfolgreich, da sie einen gemeinsamen Supertyp, FLOAT64, haben.
INT64
BOOL
Fehler Wenn Sie INT64 und BOOL supertypisieren, schlägt dies fehl, da sie keinen gemeinsamen Supertyp haben.

Exakte und ungenaue Typen

Numerische Typen können exakt oder ungenau sein. Für die Supertypisierung gilt: Wenn alle Eingabetypen exakte Typen sind, kann der resultierende Supertyp nur ein exakter Typ sein.

Die folgende Tabelle enthält die genauen, exakten numerischen Datentypen.

Exakte Typen Ungenaue Typen
INT64
NUMERIC
BIGNUMERIC
FLOAT64

Beispiele

Eingabetypen Gemeinsamer Supertyp Rückgabe: Hinweise
INT64
FLOAT64
FLOAT64 FLOAT64 Wenn die Supertyping-Funktion auf INT64 und DOUBLE angewendet wird, ist das Supertypisieren erfolgreich, da exakte und ungenaue numerische Typen supertypisiert werden.

Typenspezifität

Jeder Typ hat eine Domain mit unterstützten Werten. Ein Typ mit einer niedrigeren Domain ist spezifischer als ein Typ mit einer größeren Domain. Exakte Typen sind spezifischer als ungenaue Typen, da diese einen größeren Bereich von unterstützten Domainwerten enthalten als exakte Typen. Beispielsweise ist INT64 spezifischer als FLOAT64.

Supertypen und Literale

Supertypregeln für Literale sind großzügiger als für normale Ausdrücke und stimmen mit impliziten Erzwingungsregeln überein. Der folgende Algorithmus wird verwendet, wenn der Eingabesatz Typen enthält, die sich auf Literale beziehen:

  • Wenn der Satz Nicht-Literale enthält, suchen Sie den Satz allgemeiner Supertypen der Nicht-Literale.
  • Wenn es mindestens einen möglichen Supertyp gibt, suchen Sie nach dem spezifischsten Typ, für den die verbleibenden Literaltypen implizit erzwungen werden können, und geben Sie diesen Supertyp zurück. Andernfalls gibt es keinen Supertyp.
  • Wenn der Satz nur Typen enthält, die sich auf Literale beziehen, berechnen Sie den Supertyp der Literaltypen.
  • Wenn alle Eingabetypen mit NULL-Literalen verknüpft sind, lautet der resultierende Supertyp INT64.
  • Wenn kein gemeinsamer Supertyp gefunden wird, wird ein Fehler erzeugt.

Beispiele

Eingabetypen Gemeinsamer Supertyp Rückgabe:
INT64-Literal
UINT64-Ausdruck
UINT64 UINT64
TIMESTAMP-Ausdruck
STRING-Literal
TIMESTAMP TIMESTAMP
NULL-Literal
NULL-Literal
INT64 INT64
BOOL-Literal
TIMESTAMP-Literal
Fehler