Types de données Chaîne & Binaire¶
Cette rubrique décrit les types de données de chaîne/texte, y compris les chaînes binaires, pris en charge dans Snowflake, ainsi que les formats pris en charge pour les constantes/littéraux de chaîne.
Dans ce chapitre :
Types de données pour les chaînes de texte¶
Snowflake prend en charge les types de données suivants pour les chaînes de texte (c.-à-d. de caractères).
VARCHAR¶
VARCHAR contient des caractères unicode.
La longueur maximale est de 16 MB (non compressé). Le nombre maximum de caractères Unicode pouvant être stockés dans une colonne VARCHAR dépend si les caractères sont mono-octet ou multi-octets :
- Un octet
16,777,216
- Multi-octets
Entre 8 388 608 (2 octets par caractère) et 4 194 304 (4 octets par caractère)
Si aucune longueur n’est spécifiée, la valeur par défaut est la longueur maximale.
Une colonne ne consomme de l’espace de stockage que pour la quantité de données réellement stockées. Par exemple, une chaîne d’1 caractère dans une colonne VARCHAR(16777216) ne consomme qu’un seul caractère.
Il n’y a pas de différence de performance entre l’utilisation de la déclaration VARCHAR sur toute la longueur VARCHAR(16777216) ou l’utilisation d’une taille inférieure. Notez que dans n’importe quelle base de données relationnelle, les instructions SELECT dans lesquelles une clause WHERE fait référence à des colonnes VARCHAR ou colonnes de chaînes ne sont pas aussi rapides que les instructions SELECT filtrées en utilisant une condition de date ou de colonne numérique.
Certains outils BI/ETL définissent la taille maximale des données VARCHAR en stockage ou en mémoire. Si vous connaissez la taille maximale d’une colonne, vous pouvez limiter la taille lorsque vous ajoutez la colonne.
CHAR , CHARACTER¶
Synonyme de VARCHAR, sauf que CHAR(1) est la valeur par défaut si la longueur n’est pas spécifiée.
Note
Snowflake s’écarte actuellement de la sémantique courante CHAR en ce sens que les chaînes plus courtes que la longueur maximale ne sont pas espacées à la fin.
STRING , TEXT¶
Synonyme de VARCHAR.
Exemples de chaînes de caractères dans les colonnes de tables¶
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 |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+
Types de données pour les chaînes binaires¶
Snowflake prend en charge les types de données suivants pour les chaînes binaires.
BINARY¶
La longueur maximale est de 8 MB (8 388 608 octets). Contrairement à VARCHAR, le type de données BINARY n’a aucune notion de caractères Unicode, donc la longueur est toujours mesurée en termes d’octets.
Si aucune longueur n’est spécifiée, la valeur par défaut est la longueur maximale.
VARBINARY¶
VARBINARY est synonyme de BINARY.
Représentation interne¶
Le type de données BINARY contient une séquence d’octets de 8 bits.
Lorsque Snowflake affiche des valeurs de données BINARY, Snowflake représente souvent chaque octet comme 2 caractères hexadécimaux. Par exemple, le mot « HELP » peut être affiché comme 48454C50
, où « 48 » est l’équivalent hexadécimal de la lettre ASCII (Unicode) « H », « 45 » est la représentation hexadécimale de la lettre « E », etc.
Pour plus d’informations sur la saisie et l’affichage de données BINARY, voir : Entrée et sortie binaires.
Exemples binaires dans les colonnes de tables¶
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 |
+------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------+
Constantes de chaîne¶
Les constantes (aussi connues sous le nom de litéraux) font référence à des valeurs de données fixes. Les constantes de chaîne dans Snowflake doivent toujours être entourées entre des caractères de délimitation. Snowflake prend en charge l’utilisation de guillemets simples ou de signes de dollar pour délimiter les constantes de chaîne.
Constantes de chaîne simple entre guillemets simples¶
Une constante de chaîne peut être placée entre des délimiteurs de guillemets simples (par ex. 'This is a string'
). Pour inclure un caractère entre guillemets simples dans une constante de chaîne, tapez deux guillemets simples avant et après le caractère (par ex. ''
).
Par exemple :
SELECT 'Today''s sales projections', '-''''-'; +------------------------------+----------+ | 'TODAY''S SALES PROJECTIONS' | '-''''-' | |------------------------------+----------| | Today's sales projections | -''- | +------------------------------+----------+
Note
Deux guillemets simples ne sont pas équivalents à un guillemet double ("
), qui est utilisé (si nécessaire) pour délimiter les identificateurs d’objet. Pour plus d’informations, voir Exigences relatives à l’identificateur.
Séquences d’échappement¶
Au sein d’une constante de chaîne entre guillemets simples, il est possible d’inclure un quillemet simple ainsi que d’autres caractères spéciaux dans des séquences d’échappement. Une barre oblique inverse (\
) commence une séquence d’échappement.
Il existe trois types de séquences d’échappement : simple, octale et hexadécimale :
Séquence d’échappement
Caractère représenté
“
Un guillemet simple (
'
)«
Un guillemet double (
"
)\
Une barre oblique inverse (
\
)b
Un retour arrière
f
Un saut de page
n
Un saut de ligne (nouvelle ligne)
r
Un retour chariot
t
Une tabulation
ooo
Un caractère ASCII en notation octale
xhhh
Un caractère ASCII en notation hexadécimale
Par exemple :
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 | -!- | +-------------+-----+
Notez qu’un caractère non spécial échappé avec une barre oblique inverse est simplement interprété comme ce caractère, par exemple '\z'
devient 'z'
.
Constantes de chaînes de caractères comprises entre des dollars¶
Lorsqu’une chaîne de caractères contient plusieurs guillemets, il peut être plus simple d’inclure des constantes de chaîne de caractères entre des signes dollar plutôt que des guillemets simples. Une constante de chaîne comprise entre des dollars se compose des caractères de la chaîne entourés d’une paire de signes de dollar ($$
).
Par exemple, les constantes de chaîne suivantes sont équivalentes :
'string with a \' character' $$string with a ' character$$
Une constante de chaîne entre dollars peut inclure des guillemets, ou tout autre caractère, sans qu’il soit nécessaire d’utiliser des caractères d’échappement. Le contenu de la chaîne est toujours écrit littéralement. Notez que la constante de chaîne de caractères ne peut pas contenir de signes double-dollar.
Par exemple :
SELECT $1, $2 FROM VALUES ('row1', $$a ' \ \t \0x123 z $ $$); +------+-------------------------------------------------------+ | $1 | $2 | |------+-------------------------------------------------------| | row1 | a | | | ' \ \t | | | \0x123 z $ | +------+-------------------------------------------------------+