Datentypen - Amazon Redshift

Datentypen

Jeder Wert, den Amazon Redshift speichert oder abruft, gehört zu einem Datentyp mit einem festen Satz von Eigenschaften. Datentypen werden deklariert, wenn Tabellen erstellt werden. Eine Datentyp beschränkt die Gruppe von Werten, den eine Spalte oder ein Argument enthalten kann.

In der folgenden Tabelle sind alle Datentypen aufgeführt, die Sie in Amazon-Redshift-Tabellen verwenden können.

Datentyp Aliasnamen Beschreibung
SMALLINT INT2 2-Byte-Ganzzahl mit Vorzeichen
INTEGER INT, INT4 4-Byte-Ganzzahl mit Vorzeichen
BIGINT INT8 8-Byte-Ganzzahl mit Vorzeichen
DECIMAL NUMERIC Genauer Zahlenwert mit wählbarer Genauigkeit
REAL FLOAT4 Gleitkommazahl mit einfacher Genauigkeit
DOUBLE PRECISION FLOAT8, FLOAT Gleitkommazahl mit doppelter Genauigkeit
BOOLEAN BOOL Logischer/Boolescher Wert (wahr/falsch)
CHAR CHARACTER, NCHAR, BPCHAR Zeichenfolge mit fester Länge
VARCHAR CHARACTER VARYING, NVARCHAR, TEXT Zeichenfolge mit variabler Länge und benutzerdefiniertem Grenzwert
DATUM Kalenderdatum (Jahr, Monat, Tag)
TIMESTAMP TIMESTAMP WITHOUT TIME ZONE Datum und Uhrzeit (ohne Zeitzone)
TIMESTAMPTZ TIMESTAMP WITH TIME ZONE Datum und Uhrzeit (mit Zeitzone)
GEOMETRY Geodaten
GEOGRAPHY Geodaten
HLLSKETCH Typ, der mit HyperLogLog-Skizzen verwendet wird.
SUPER Ein übergeordneter Datentyp, der alle skalaren Typen von Amazon Redshift umfasst, einschließlich komplexer Typen wie ARRAY und STRUCTS.
TIME TIME WITHOUT TIME ZONE Uhrzeit
TIMETZ TIME WITH TIME ZONE Uhrzeit mit Zeitzone
VARBYTE VARBINARY, BINARY VARYING Binärwert mit variabler Länge
Anmerkung

Weitere Informationen über nicht unterstützte Datentypen wie „char“ (dieser Datentyp steht in Anführungszeichen) finden Sie unter Nicht unterstützte PostgreSQL-Datentypen.

Multibyte-Zeichen

Der Datentyp VARCHAR unterstützt Multibyte-UTF-8-Zeichen mit einer Länge von bis zu vier Bytes. Zeichen mit einer Länge von fünf Bytes oder mehr werden nicht unterstützt. Sie berechnen die Größe einer VARCHAR-Spalte, die Multibyte-Zeichen enthält, indem Sie die Anzahl der Zeichen mit der Anzahl der Bytes pro Zeichen multiplizieren. Wenn eine Zeichenfolge z. B. vier chinesischen Zeichen enthält und jedes Zeichen drei Bytes lang ist, dann ist eine VARCHAR(12)-Spalte erforderlich, um die Zeichenfolge zu speichern.

Der Datentyp VARCHAR bietet keine Unterstützung für die folgenden ungültigen UTF-8-Codepunkte:

0xD800 – 0xDFFF (Bytesequenzen: ED A0 80ED BF BF)

Der Datentyp CHAR bietet keine Unterstützung für Multibyte-Zeichen.

Kompatibilität von Typen und Umwandlung zwischen Typen

Im Folgenden finden Sie eine Erläuterung der Funktionsweise der Regeln zur Umwandlung von Typen und zur Kompatibilität zwischen Datentypen in Amazon Redshift.

Compatibility

Es gibt verschiedene Datenbankoperationen, bei denen die Datentypen passend gemacht und den Literalwerten und Konstanten Datentypen zugewiesen werden. Hierzu gehören die folgenden:

  • DML- (Data Manipulation Language-)Operationen über Tabellen

  • UNION-, INTERSECT- und EXCEPT-Abfragen

  • CASE-Ausdrücke

  • Auswertung von Prädikaten wie LIKE oder IN

  • Auswertung von SQL-Funktionen, bei denen Vergleiche durchgeführt oder Daten extrahiert werden

  • Vergleiche mit mathematischen Operatoren

Die Ergebnisse dieser Operationen hängen von den Regeln zur Umwandlung von Typen und der Kompatibilität zwischen Datentypen ab. Kompatibilität impliziert, dass Werte nicht immer zwangsläufig ein und demselben Datentyp zugeordnet sein müssen. Da bestimmte Datentypen untereinander kompatibel sind, ist eine implizite Umwandlung (englisch coercion) möglich. Weitere Informationen finden Sie unter Arten von impliziter Umwandlung. Wenn Datentypen inkompatibel sind, können Sie manchmal einen Wert in einen anderen Datentyp umwandeln, indem Sie eine explizite Typumwandlungsfunktion verwenden.

Allgemeine Regeln zur Kompatibilität und zur Umwandlung

Beachten Sie die folgenden Regeln zur Kompatibilität und zur Typumwandlung:

  • Datentypen aus derselben Kategorie sind i. d. R. miteinander kompatibel und können implizit ineinander konvertiert werden. Ein Beispiel hierfür sind numerische Datentypen.

    Sie können beispielsweise mit einer impliziten Umwandlung einen Dezimalwert in eine Spalte mit Ganzzahlen einfügen. Dabei werden Dezimalwerte auf eine Ganzzahl gerundet. Sie können auch einen Zahlenwert wie 2008 aus einem Datum extrahieren und den Wert in eine ganzzahlige Spalte einfügen.

  • Numerische Datentypen lösen Überlaufbedingungen aus, falls versucht wird, Werte außerhalb des Wertebereichs einzugeben. Beispielsweise passt ein Dezimalwert mit einer Genauigkeit von 5 Stellen nicht in eine Dezimalspalte mit einer Genauigkeit von 4 Stellen. Eine Ganzzahl bzw. der ganzzahlige Anteil einer Dezimalzahl wird nie abgeschnitten. Hingegen kann können die Nachkommastellen von Dezimalzahlen bei Bedarf auf- oder abgerundet werden. Die Ergebnisse expliziter Umwandlungen von Werten, aus der Tabelle ausgewählt wurden, werden jedoch nicht gerundet.

  • Unterschiedliche Arten von Zeichenfolgen sind miteinander kompatibel. Zeichenfolgen in VARCHAR-Spalten, die Einzelbytedaten enthalten und Zeichenfolgen in CHAR-Spalten können miteinander verglichen und implizit konvertiert werden. VARCHAR-Zeichenfolgen mit Multibytedaten können nicht mit CHAR-Spalten verglichen werden. Sie können eine Zeichenfolge in ein Datum, eine Uhrzeit, einen Zeitstempel oder einen Zahlenwert umwandeln, wenn die Zeichenfolge einen gültigen Literalwert darstellt. Leerzeichen am Anfang und am Ende der Zeichenfolge werden dabei ignoriert. Umgekehrt können Sie auch ein Datum, eine Uhrzeit, einen Zeitstempel oder einen Zahlenwert in eine Zeichenfolge mit fester oder variabler Länge konvertieren.

    Anmerkung

    Wenn Sie eine Zeichenfolge in einen numerischen Typ umwandeln möchten, muss die Zeichenfolge die Zeichendarstellung einer Zahl sein. Sie können beispielsweise die Zeichenfolgen '1.0' und '5.9' in Dezimalwerte konvertieren, 'ABC' hingegen in keinen numerischen Typ.

  • Wenn Sie numerische Typen mit Zeichenfolgen vergleichen, werden die numerischen Werte in Zeichenfolgen konvertiert. Um eine Umwandlung in der Gegenrichtung zu erreichen (die Zeichenfolgen in Zahlenwerte umzuwandeln), müssen Sie eine explizite Funktion verwenden, beispielsweise CAST and CONVERT.

  • Wenn Sie einen 64-Bit-Wert vom Typ DECIMAL oder NUMERIC in einen Typ mit einer höheren Genauigkeit umwandeln möchten, müssen Sie eine explizite Funktion verwenden, beispielsweise CAST oder CONVERT.

  • Wenn Sie DATE oder TIMESTAMP in TIMESTAMPTZ konvertieren oder TIME in TIMETZ konvertieren, wird die Zeitzone auf die Zeitzone der aktuellen Sitzung festgelegt. Standardmäßig ist als Zeitzone für Sitzungen UTC festgelegt. Weitere Informationen zum Festlegen der Zeitzone für Sitzungen finden Sie unter Zeitzone.

  • Analog dazu wird auch TIMESTAMPTZ auf der Grundlage der Zeitzone der aktuellen Sitzung in DATE, TIME oder TIMESTAMP konvertiert. Standardmäßig ist als Zeitzone für Sitzungen UTC festgelegt. Die Zeitzoneninformationen werden nach der Konvertierung wieder entfernt.

  • Zeichenfolgen, die einen Zeitstempel mit angegebener Zeitzone darstellen, werden unter Verwendung der Zeitzone der aktuellen Sitzung in TIMESTAMPTZ konvertiert. Diese ist standardmäßig UTC. Zeichenfolgen, die eine Uhrzeit mit angegebener Zeitzone darstellen, werden unter Verwendung der Zeitzone der aktuellen Sitzung in TIMETZ konvertiert. Diese ist standardmäßig UTC.

Arten von impliziter Umwandlung

Es gibt zwei Arten von impliziten Typumwandlungen:

  • Implizite Umwandlung bei der Zuweisung, beispielsweise bei der Zuweisung von Werten in INSERT- oder UPDATE-Befehlen.

  • Implizite Umwandlung in Ausdrücken, beispielsweise bei Vergleichen in der WHERE-Klausel.

In der folgenden Tabelle sind die Datentypen aufgelistet, die eine implizite Konvertierung in Zuweisungen oder Ausdrücken ermöglichen. Sie können diese Konvertierungen auch mit expliziten Umwandlungsfunktionen durchführen.

Von Typ Zu Typ
BIGINT (INT8) BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
CHAR VARCHAR
DATUM CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT (INT8)
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
INTEGER (INT, INT4) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
REAL (FLOAT4) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
SMALLINT (INT2)
VARCHAR
SMALLINT (INT2) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATUM
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATUM
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
TIMETZ VARCHAR
TIME
GEOMETRY GEOGRAPHY
GEOGRAPHY GEOMETRY
Anmerkung

Bei impliziten Typumwandlungen zwischen TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ oder Zeichenfolgen wird die Zeitzone der aktuellen Sitzung verwendet. Weitere Informationen zum Festlegen der aktuellen Zeitzone finden Sie unter Zeitzone.

Die Datentypen GEOMETRY und GEOGRAPHY können nicht implizit in einen anderen Datentyp umgewandelt werden (außer untereinander). Weitere Informationen finden Sie unter Die Funktionen CAST und CONVERT.

Der Datentyp VARBYTE kann nicht implizit in einen anderen Datentyp umgewandelt werden. Weitere Informationen finden Sie unter Die Funktionen CAST und CONVERT.

Verwenden der dynamischen Typisierung für den SUPER-Datentyp

Amazon Redshift verwendet die dynamische Typisierung, um schemalose SUPER-Daten zu verarbeiten, ohne dass die Datentypen deklariert werden müssen, bevor Sie sie in Ihrer Abfrage verwenden. Bei der dynamischen Typisierung werden die Ergebnisse der Navigation in SUPER-Datenspalten verwendet, ohne sie explizit in Amazon-Redshift-Typen umwandeln zu müssen. Weitere Informationen zur Verwendung der dynamischen Typisierung für SUPER Datentypen finden Sie unter Dynamische Typisierung.

Sie können SUPER-Werte in andere Datentypen umwandeln und umgekehrt, mit einigen Ausnahmen. Weitere Informationen finden Sie unter Einschränkungen.