Zeichenfolgen- und Binärdatentypen

Unter diesem Thema werden die von Snowflake unterstützten Datentypen für Zeichenfolge/Text (einschließlich binärer Zeichenfolgen) sowie die unterstützten Formate für Zeichenfolgenkonstanten/-literale beschrieben.

Unter diesem Thema:

Datentypen für Textzeichenfolgen

Snowflake unterstützt die folgenden Datentypen für Textzeichenfolgen (d. h. Zeichenfolgen).

VARCHAR

VARCHAR enthält Unicode-Zeichen.

Die maximale Länge beträgt 16 MB (unkomprimiert). Die maximale Anzahl der Unicode-Zeichen, die in einer VARCHAR-Spalte gespeichert werden können, hängt davon ab, ob die Zeichen vom Typ Einzelbyte oder Multibyte sind:

Einzelbyte

16,777,216

Multibyte

Zwischen 8.388.608 (2 Bytes pro Zeichen) und 4.194.304 (4 Bytes pro Zeichen)

Wenn keine Länge angegeben wird, ist der Standard die maximale Länge.

Eine Spalte verbraucht nur Speicherplatz für die Menge der tatsächlich gespeicherten Daten. Beispielsweise verbraucht eine 1-stellige Zeichenfolge in einer VARCHAR(16777216)-Spalte nur ein einziges Zeichen.

Es gibt keinen Leistungsunterschied zwischen der Verwendung der vollständigen VARCHAR-Deklaration VARCHAR(16777216) oder einer kleineren Größe. Beachten Sie, dass in jeder relationalen Datenbank SELECT-Anweisungen, in denen eine WHERE-Klausel auf VARCHAR-Spalten oder Zeichenfolgenspalten verweist, nicht so schnell sind wie SELECT-Anweisungen, die mit einer Datums- oder numerischen Spaltenbedingung gefiltert werden.

Einige BI/ETL-Tools definieren die maximale Größe der VARCHAR-Daten im Speicher oder im Arbeitsspeicher. Wenn Sie die maximale Größe einer Spalte kennen, können Sie die Größe beim Hinzufügen der Spalte begrenzen.

CHAR , CHARACTER

Synonym für VARCHAR, allerdings ist CHAR(1) der Standard, wenn keine Länge angegeben wird.

Bemerkung

Snowflake weicht derzeit von der üblichen CHAR-Semantik dadurch ab, dass Zeichenfolgen, die kürzer als die maximale Länge sind, am Ende nicht mit Leerzeichen aufgefüllt werden.

STRING , TEXT

Synonym für VARCHAR.

Zeichenfolgenbeispiele in Tabellenspalten

CREATE OR REPLACE TABLE test_text(v VARCHAR,
                                  v50 VARCHAR(50),
                                  c CHAR,
                                  c10 CHAR(10),
                                  s STRING,
                                  s20 STRING(20),
                                  t TEXT,
                                  t30 TEXT(30)
                                  );

DESC TABLE test_text;

+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type              | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| V    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| V50  | VARCHAR(50)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| C    | VARCHAR(1)        | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| C10  | VARCHAR(10)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| S    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| S20  | VARCHAR(20)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| T    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| T30  | VARCHAR(30)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+

Datentypen für binäre Zeichenfolgen

Snowflake unterstützt die folgenden Datentypen für binäre Zeichenfolgen.

BINARY

Die maximale Länge beträgt 8 MB (8.388.608 Bytes). Im Gegensatz zu VARCHAR hat der Datentyp BINARY keine Vorstellung von Unicode-Zeichen, sodass die Länge stets in Form von Bytes gemessen wird.

Wenn keine Länge angegeben wird, ist der Standard die maximale Länge.

VARBINARY

VARBINARY ist gleichbedeutend mit BINARY.

Interne Repräsentation

Der Datentyp BINARY enthält eine Folge von 8-Bit-Bytes.

Wenn Snowflake BINARY-Datenwerte anzeigt, stellt Snowflake oft jedes Byte als 2 Hexadezimalzeichen dar. So kann beispielsweise das Wort „HELP“ als 48454C50 angezeigt werden, wobei „48“ das hexadezimale Äquivalent des ASCII (Unicode)-Buchstaben „H“ ist, „45“ die hexadezimale Darstellung des Buchstabens „E“ usw.

Weitere Informationen zum Eingeben und Anzeigen von BINARY-Daten finden Sie unter Eingabe und Ausgabe von Binärdaten.

Beispiele für Binärwerte in Tabellenspalten

CREATE OR REPLACE TABLE test_binary(b BINARY,
                                    b100 BINARY(100),
                                    vb VARBINARY
                                    );

DESC TABLE test_binary;

+------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type            | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| B    | BINARY(8388608) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| B100 | BINARY(100)     | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| VB   | BINARY(8388608) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------+

Zeichenfolgenkonstanten

Konstanten (auch als Literale bekannt) beziehen sich auf feste Datenwerte. Zeichenfolgenkonstanten in Snowflake müssen stets in Trennzeichen eingeschlossen werden. Zur Trennung von von Zeichenfolgenkonstanten unterstützt Snowflake die Verwendung von einfachen Anführungszeichen oder Dollarzeichen.

Zeichenfolgenkonstanten in einfachen Anführungszeichen

Eine Zeichenfolgenkonstante kann in einfache Anführungszeichen eingeschlossen werden (z. B. 'This is a string'). Um in einer Zeichenfolgenkonstante ein einzelnes Anführungszeichen einzufügen, geben Sie nebeneinander zwei einfache Anführungszeichen ein (z. B. '').

Beispiel:

SELECT 'Today''s sales projections', '-''''-';

+------------------------------+----------+
| 'TODAY''S SALES PROJECTIONS' | '-''''-' |
|------------------------------+----------|
| Today's sales projections    | -''-     |
+------------------------------+----------+

Bemerkung

Zwei einfache Anführungszeichen sind nicht das Gleiche wie ein doppeltes Anführungszeichen ("), das (ggf.) zur Trennung von Objektbezeichnern verwendet wird. Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.

Escape-Sequenzen

Innerhalb einer Zeichenfolgenkonstanten mit einfachen Anführungszeichen kann in Escape-Sequenzen alternativ auch ein einfaches Anführungszeichen zusammen mit anderen Sonderzeichen verwendet werden. Ein Backslash-Zeichen (\) beginnt eine Escape-Sequenz mit Backslash.

Es gibt drei Arten von Escape-Sequenzen: einfach, oktal und hexadezimal:

Escape-Sequenz

Dargestelltes Zeichen

Ein einfaches Anführungszeichen (')

Ein doppeltes Anführungszeichen (")

\

Ein Backslash-Zeichen (\)

b

Ein Rücktastenzeichen

f

Ein Formfeed-Zeichen

n

Ein Zeilenumbruchzeichen (Linefeed)

r

Ein Zeilenumbruchzeichen

t

Ein Tabulatorzeichen

ooo

Ein ASCII-Zeichen in oktaler Schreibweise

xhhh

Ein ASCII-Zeichen in hexadezimaler Schreibweise

Beispiel:

SELECT $1, $2 FROM
VALUES
('Tab','Hel\tlo'),
('Newline','Hel\nlo'),
('Octal','-\041-'),
('Hexadecimal','-\x21-')
;

+-------------+-----+
| $1          | $2  |
|-------------+-----|
| Tab         | Hel lo     |
| Newline     | Hel |
|             | lo  |
| Octal       | -!- |
| Hexadecimal | -!- |
+-------------+-----+

Beachten Sie, dass ein Nicht-Sonderzeichen, das ein Backslash als Escape-Zeichen aufweist, einfach als dieses Zeichen interpretiert wird, z. B. wird '\z' zu 'z'.

Zeichenfolgenkonstanten in Dollarzeichen

Wenn eine Zeichenfolge viele Anführungszeichen enthält, kann es einfacher sein, Zeichenfolgenkonstanten in Dollarzeichen einzuschließen und nicht in einfache Anführungszeichen. Eine Zeichenfolgenkonstante in Dollarzeichen besteht aus den Zeichen in der Zeichenfolge, umgeben von einem Paar Dollarzeichen ($$).

Beispielsweise sind die folgenden Zeichenfolgenkonstanten gleichwertig:

'string with a \' character'

$$string with a ' character$$

Eine Zeichenfolgenkonstante mit Dollarzeichen als Anführungszeichen kann Anführungszeichen oder beliebige andere Zeichen beinhalten, ohne dass für sie ein Escape erfolgen muss. Der Zeichenfolgeninhalt wird immer buchstäblich geschrieben. Beachten Sie, dass die Zeichenfolgenkonstante keine doppelten Dollarzeichen enthalten darf.

Beispiel:

SELECT $1, $2 FROM VALUES ('row1', $$a
                                      ' \ \t
                                      \0x123 z $ $$);

+------+-------------------------------------------------------+
| $1   | $2                                                    |
|------+-------------------------------------------------------|
| row1 | a                                                     |
|      |                                           ' \ \t      |
|      |                                           \0x123 z $  |
+------+-------------------------------------------------------+