CREATE TABLE - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

CREATE TABLE

Crée une nouvelle table dans la base de données actuelle. Vous définissez une liste de colonnes qui contiennent chacune des données d’un type distinct. Le propriétaire de la table est l’émetteur de la commande CREATE TABLE.

Privilèges requis

Les privilèges suivants sont requis pour CREATE TABLE :

  • Superuser

  • Utilisateurs disposant du privilège CREATE TABLE

Syntaxe

CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE [ IF NOT EXISTS ] table_name ( { column_name data_type [column_attributes] [ column_constraints ] | table_constraints | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] ) [ BACKUP { YES | NO } ] [table_attributes] where column_attributes are: [ DEFAULT default_expr ] [ IDENTITY ( seed, step ) ] [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ] [ ENCODE encoding ] [ DISTKEY ] [ SORTKEY ] [ COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE ] and column_constraints are: [ { NOT NULL | NULL } ] [ { UNIQUE | PRIMARY KEY } ] [ REFERENCES reftable [ ( refcolumn ) ] ] and table_constraints are: [ UNIQUE ( column_name [, ... ] ) ] [ PRIMARY KEY ( column_name [, ... ] ) ] [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ] and table_attributes are: [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ] [ DISTKEY ( column_name ) ] [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ] ] [ ENCODE AUTO ]

Paramètres

LOCAL

Facultatif. Même si ce mot-clé est accepté dans l’instruction, il n’a aucun effet dans Amazon Redshift.

TEMPORARY | TEMP

Mot-clé qui crée une table temporaire visible uniquement dans la séance en cours. La table temporaire est automatiquement supprimée à la fin de la séance dans laquelle elle a été créée. La table temporaire peut avoir le même nom qu’une table permanente. La table temporaire est créée dans un schéma distinct, propre à la séance. (Vous ne pouvez pas spécifier un nom pour ce schéma.) Comme ce schéma temporaire devient le premier schéma du chemin de recherche, la table temporaire a priorité sur la table permanente, sauf si vous qualifiez le nom de la table avec le nom du schéma pour accéder à la table permanente. Pour plus d’informations sur les schémas et les priorités, consultez search_path.

Note

Par défaut, les utilisateurs de la base de données ont l’autorisation de créer des tables temporaires par leur appartenance automatique au groupe PUBLIC. Pour refuser ce privilège à un utilisateur, retirez le privilège TEMP du groupe PUBLIC, puis accordez explicitement le privilège TEMP uniquement à des utilisateurs ou groupes d’utilisateurs spécifiques.

IF NOT EXISTS

Clause indiquant que si la table spécifiée existe déjà, la commande ne doit faire aucune modification et renvoyer un message selon lequel la table existe, plutôt que de s’arrêter avec une erreur. Notez que la table existante peut ne ressembler en rien à celle que vous avez créée ; seul le nom de la table est comparé.

Comme cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si CREATE TABLE tente de créer une table qui existe déjà.

table_name

Nom de la table à créer.

Important

Si vous spécifiez un nom de table qui commence par « # », la table est créée comme table temporaire. Voici un exemple :

create table #newtable (id int);

Vous faites également référence à la table avec le « # ». Par exemple :

select * from #newtable;

La longueur maximale d’un nom de table est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Vous pouvez utiliser des caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Amazon Redshift applique un quota du nombre de tables par cluster et par type de nœud, y compris les tables temporaires définies par l’utilisateur et les tables temporaires créées par Amazon Redshift lors du traitement des requêtes ou de la maintenance du système. Le cas échéant, le nom de la table peut être qualifié avec le nom de la base de données et le nom du schéma. Dans l’exemple suivant, le nom de base de données est tickit, le nom du schéma public et le nom de la table test.

create table tickit.public.test (c1 int);

Si la base de données ou le schéma n’existe pas, la table n’est pas créée et l’instruction renvoie une erreur. Vous ne pouvez pas créer de tables ni de vues dans les bases de données système template0, template1, padb_harvest ou sys:internal.

Si un nom de schéma est donné, la nouvelle table est créée dans ce schéma (en supposant que le créateur ait accès au schéma). Le nom de la table doit être un nom unique pour ce schéma. Si aucun schéma n’est spécifié, la table est créée en utilisant le schéma de base de données actuel. Si vous créez une table temporaire, vous ne pouvez pas spécifier un nom de schéma, car les tables temporaires existent dans un schéma spécial.

Plusieurs tables temporaires de même nom peuvent exister en même temps dans la même base de données même si elles sont créées dans des séances distinctes, car les tables sont attribuées à des schémas différents. Pour plus d’informations sur les noms valides, consultez Noms et identificateurs.

column_name

Nom d’une colonne à créer dans la nouvelle table. La longueur maximale d’un nom de colonne est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Vous pouvez utiliser des caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Le nombre maximal de colonnes que vous pouvez définir dans une seule table est de 1 600. Pour plus d’informations sur les noms valides, consultez Noms et identificateurs.

Note

Si vous créez une grande table, veillez à ce que la liste de colonnes ne dépasse pas les limites de largeur de ligne pour les résultats intermédiaires pendant le traitement des charges et des requêtes. Pour plus d'informations, consultez Notes d’utilisation.

data_type

Type de données de la colonne en cours de création. Pour les colonnes CHAR et VARCHAR, vous pouvez utiliser le mot-clé MAX au lieu de déclarer une longueur maximale. MAX définit la longueur maximale sur 4 096 octets pour CHAR ou 65535 octets pour VARCHAR. La taille maximum d’un objet GEOMETRY est de 1 048 447 octets.

Pour obtenir des informations sur les types de données pris en charge par Amazon Redshift, consultez Types de données.

DEFAULT expr_défaut

Clause qui attribue une valeur de données par défaut à la colonne. Le type de données de expr_défaut doit correspondre au type de données de la colonne. La valeur DEFAULT doit être une expression exempte de variable. Les sous-requêtes, les références croisées aux autres colonnes de la table active et les fonctions définies par l’utilisateur ne sont pas autorisées.

L’expression expr_défaut est utilisée dans toute opération INSERT qui ne spécifie pas une valeur pour la colonne. Si aucune valeur par défaut n’est spécifiée, la valeur par défaut de la colonne est la valeur null.

Si une opération COPY avec une liste de colonnes définies omet une colonne qui a une valeur DEFAULT, la commande COPY insère la valeur de l’expression expr_défaut.

IDENTITY(seed, step)

Clause qui spécifie que la colonne est une colonne IDENTITY. Une colonne IDENTITY contient des valeurs uniques générées automatiquement. Le type de données d’une colonne IDENTITY doit être INT ou BIGINT.

Lorsque vous ajoutez des lignes à l’aide d’une instruction INSERT ou INSERT INTO [tablename] VALUES(), ces valeurs commencent par la valeur spécifiée en tant que seed et sont incrémentées du nombre spécifié comme step.

Quand la table est chargée à l’aide d’une instruction INSERT INTO [tablename] SELECT * FROM ou COPY, les données sont chargées en parallèle et distribuées aux tranches de nœuds. Pour garantir que les valeurs d’identité sont uniques, Amazon Redshift ignore un certain nombre de valeurs lors de la création des valeurs d’identité. Les valeurs d’identité sont uniques, mais l’ordre ne correspond pas toujours à celui des fichiers source.

GENERATED BY DEFAULT AS IDENTITY(seed, step)

Clause qui spécifie que la colonne est une colonne IDENTITY par défaut et qui vous permet d’attribuer automatiquement une valeur unique à la colonne. Le type de données d’une colonne IDENTITY doit être INT ou BIGINT. Lorsque vous ajoutez des lignes sans valeurs, ces valeurs commencent par la valeur spécifiée en tant que seed et s’incrémentent du nombre spécifié comme s step. Pour obtenir des informations sur la manière dont les valeurs sont générées, consultez IDENTITY.

De plus, lors des opérations INSERT, UPDATE ou COPY, vous pouvez fournir une valeur sans EXPLICIT_IDS. Amazon Redshift utilise cette valeur pour insérer dans la colonne d’identité au lieu d’utiliser la valeur générée par le système. La valeur peut être un doublon, une valeur inférieure au seed ou une valeur comprise entre les valeurs de step. Amazon Redshift ne vérifie pas si les valeurs de la colonne sont uniques. Le fait de fournir une valeur n’affecte pas la prochaine valeur générée par le système.

Note

Si vous avez besoin de valeurs uniques dans la colonne, n’ajoutez pas de valeur en double. À la place, ajoutez une valeur unique inférieure au seed ou comprise entre les valeurs de step.

Gardez à l’esprit ce qui suit au sujet des colonnes d’identité par défaut :

  • Les colonnes d’identité par défaut sont NOT NULL. NULL ne peut pas être inséré.

  • Pour insérer une valeur générée dans une colonne d’identité par défaut, utilisez le mot-clé DEFAULT.

    INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  • Le fait de remplacer des valeurs d’une colonne d’identité par défaut n’affecte pas la prochaine valeur générée.

  • Vous ne pouvez pas ajouter de colonne d’identité par défaut avec l’instruction ALTER TABLE ADD COLUMN.

  • Vous pouvez ajouter une colonne d’identité par défaut avec l’instruction ALTER TABLE APPEND.

ENCODE encodage

Encodage de compression pour une colonne. ENCODE AUTO est la valeur par défaut pour les tables. Amazon Redshift gère automatiquement l’encodage de compression pour toutes les colonnes de la table. Si vous spécifiez l’encodage de compression pour une colonne quelconque du tableau, le tableau n’est plus défini sur ENCODE AUTO. Amazon Redshift ne gère plus automatiquement le codage de compression pour toutes les colonnes de la table. Vous pouvez spécifier l’option ENCODE AUTO pour la table afin de permettre à Amazon Redshift de gérer automatiquement l’encodage de la compression pour toutes les colonnes de la table.

Pour les colonnes pour lesquelles vous ne spécifiez pas d’encodage de compression, Amazon Redshift affecte automatiquement un encodage de compression initial comme suit :

  • Toutes les colonnes de tables temporaires se voient attribuer une compression RAW par défaut.

  • Les colonnes qui sont définies comme des clés de tri se voient attribuer une compression RAW.

  • Les colonnes qui sont définies comme des types de données BOOLEAN, REAL, DOUBLE PRECISION ou GEOMETRY ou GEOGRAPHY se voient attribuer une compression RAW.

  • Les colonnes définies comme SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ sont soumises à une compression. AZ64

  • Les colonnes définies comme CHAR, VARCHAR ou VARBYTE sont affectées à la compression LZO.

Note

Si vous ne souhaitez pas qu’une colonne soit compressée, spécifiez explicitement un encodage RAW (brut).

Les encodages compression encodings suivants sont pris en charge :

  • AZ64

  • BYTEDICT

  • DELTA

  • DELTA32 K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (aucune compression)

  • RUNLENGTH

  • TEXT255

  • TEXT32 K

  • ZSTD

DISTKEY

Mot-clé qui spécifie que la colonne est la clé de distribution de la table. Une seule colonne d’une table peut être la clé de distribution. Vous pouvez utiliser le mot-clé DISTKEY après un nom de colonne ou dans le cadre de la définition de la table à l’aide de la syntaxe DISTKEY (nom_colonne). Les deux méthodes ont le même effet. Pour plus d’informations, consultez le paramètre DISTSTYLE ultérieurement dans cette rubrique.

Le type de données d’une colonne de clés de distribution peut être : REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, CHAR ou VARCHAR.

SORTKEY

Mot-clé qui spécifie que la colonne est la clé de tri de la table. Lorsque les données sont chargées dans la table, les données sont triées sur une ou plusieurs colonnes désignées comme les clés de tri. Vous pouvez utiliser le mot-clé SORTKEY après un nom de colonne pour spécifier une clé de tri à une seule colonne ou vous pouvez spécifier une ou plusieurs colonnes comme colonnes de clé de tri de la table à l’aide de la syntaxe SORTKEY (column_name [,...]). Seules les clés de tri composées sont créées avec cette syntaxe.

Vous pouvez définir un maximum de 400 colonnes SORTKEY par table.

Le type de données d’une colonne de clés de tri peut être : BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, CHAR ou VARCHAR.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

Clause qui spécifie si la recherche de chaîne ou la comparaison sur la colonne est CASE_SENSITIVE (sensible à la casse) ou CASE_INSENSITIVE (insensible à la casse). La valeur par défaut est la même que la configuration actuelle de sensibilité à la casse de la base de données.

Pour rechercher les informations de classement de la base de données, utilisez la commande suivante :

SELECT db_collation(); db_collation ---------------- case_sensitive (1 row)
NOT NULL | NULL

NOT NULL spécifie que la colonne n’est pas autorisée à contenir des valeurs null. NULL, valeur par défaut, spécifie que la colonne accepte les valeurs null. Les colonnes IDENTITY sont déclarées NOT NULL par défaut.

UNIQUE

Mot-clé qui spécifie que la colonne ne peut contenir que des valeurs uniques. Le comportement de la contrainte de table unique est identique à celui des contraintes de colonne, avec la capacité supplémentaire de s’étendre sur plusieurs colonnes. Pour définir une contrainte de table unique, utilisez la syntaxe UNIQUE (nom_colonne [,...]).

Important

Les contraintes d’unicité ont une valeur informationnelle et ne sont pas appliquées par le système.

PRIMARY KEY

Mot-clé qui spécifie que la colonne est la clé primaire de la table. Seule une colonne peut être définie comme clé primaire à l’aide d’une définition de colonne. Pour définir une contrainte de table avec une clé primaire à plusieurs colonnes, utilisez la syntaxe PRIMARY KEY (nom_colonne [,...]).

L’identification d’une colonne comme clé primaire fournit les métadonnées relatives à la conception du schéma. Une clé primaire implique que d’autres tables puissent se reposer sur cet ensemble de colonnes comme identificateur unique des lignes. Une clé primaire peut être spécifiée pour une table, que ce soit comme contrainte de colonne ou contrainte de table. La contrainte de clé primaire doit nommer un ensemble de colonnes différent des autres ensembles de colonnes nommés pour une contrainte unique définie pour la même table.

Les colonnes PRIMARY KEY sont également définies comme NOT NULL.

Important

Les contraintes de clé primaire ont uniquement un but informatif. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur.

References table_réf [ ( colonne_réf ) ]

Clause qui spécifie une contrainte de clé étrangère, ce qui implique que la colonne contienne uniquement des valeurs qui correspondent à celles de la colonne référencée d’une ligne de la table référencée. Les colonnes référencées doivent être les colonnes d’une contrainte de clé unique ou de clé primaire de la table référencée.

Important

Les contraintes de clé étrangère ont un but informatif uniquement. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur.

LIKE table_parent [ { INCLUDING | EXCLUDING } DEFAULTS ]

Clause qui spécifie une table existante à partir de laquelle la nouvelle table copie automatiquement les noms de colonne, les types de données et les contraintes NOT NULL. La nouvelle table et la table parent sont découplées et toutes les modifications apportées à la table parent ne sont pas appliquées à la nouvelle table. Les expressions par défaut des définitions de colonne copiées sont copiées uniquement si INCLUDING DEFAULTS est spécifié. Le comportement par défaut consiste à exclure les expressions par défaut, de telle sorte que toutes les colonnes de la nouvelle table aient une valeurs null par défaut.

Les tables créées avec l’option LIKE n’héritent pas des contraintes de clé primaire et de clé étrangère. Les propriétés du style de distribution, des clés de tri, de BACKUP et de NULL sont héritées par les tables LIKE, mais vous ne pouvez pas les définir explicitement dans l’instruction CREATE TABLE ... LIKE.

BACKUP { YES | NO }

Clause qui spécifie si la table doit être incluse dans les instantanés de cluster automatiques et manuels.

Pour les tables, telles que les tables intermédiaires, qui ne contiennent pas de données critiques, spécifiez BACKUP NO pour économiser du temps de traitement lorsque la création d’instantanés et la restauration à partir d’instantanés, et pour réduire l’espace de stockage sur Amazon Simple Storage Service. Le paramètre BACKUP NO n'a aucun effet sur la réplication automatique des données vers les autres nœuds du cluster. Les tables pour lesquelles BACKUP NO est spécifié sont donc restaurées en cas de défaillance d'un nœud. La valeur par défaut est BACKUP YES.

DISTSTYLE { AUTO | EVEN | KEY | ALL }

Mot-clé qui définit le style de distribution des données pour l’ensemble de la table. Amazon Redshift répartit les lignes d’une table entre les nœuds de calcul selon le style de distribution spécifié pour la table. La valeur par défaut est AUTO.

Le style de distribution que vous sélectionnez pour les tables affecte les performances globales de votre base de données. Pour plus d'informations, consultez Distribution des données pour l'optimisation des requêtes. Les styles de distribution possibles sont les suivants :

  • AUTO : Amazon Redshift attribue un style de distribution optimal basé sur les données de table. Par exemple, si le style de distribution AUTO est spécifié, Amazon Redshift affecte initialement le style de distribution ALL à une petite table. Lorsque la table s’agrandit, Amazon Redshift peut modifier le style de distribution sur KEY et choisir la clé primaire (ou une colonne de la clé primaire composite) comme DISTKEY. Si la table s’agrandit et qu’aucune des colonnes ne peut être DISTKEY, Amazon Redshift change le style de distribution sur EVEN. La modification de style de distribution se produit en arrière-plan et son impact sur les requêtes des utilisateurs est minimal.

    Pour consulter le style de distribution appliqué à une table, interrogez la table catalogue système PG_CLASS. Pour plus d'informations, consultez Affichage des styles de distribution.

  • EVEN : les données de la table sont réparties également entre les nœuds d’un cluster dans une distribution en tourniquet (round robin). IDs Les lignes sont utilisées pour déterminer la distribution, et approximativement le même nombre de lignes est distribué à chaque nœud.

  • KEY : les données sont réparties selon les valeurs de la colonne DISTKEY. Lorsque vous définissez les colonnes de jointure des tables de jointure comme clés de distribution, les lignes de jointure des deux tables sont colocalisées sur les nœuds de calcul. Lorsque les données sont colocalisées, l’optimiseur peut effectuer les jointures plus efficacement. Si vous spécifiez DISTSTYLE KEY, vous devez nommer une colonne DISTKEY, pour la table ou dans le cadre de la définition de colonne. Pour plus d’informations, consultez le paramètre DISTKEY plus haut dans cette rubrique.

  • ALL : une copie de la table complète est distribuée sur chaque nœud. Ce style de distribution garantit que toutes les lignes obligatoires pour une jointure sont disponibles sur chaque nœud, mais il multiplie les besoins de stockage et augmente les temps de charge et de maintenance de la table. Une distribution ALL peut améliorer le temps d’exécution lorsqu’elle est utilisée avec certaines tables de dimension où la distribution KEY ne convient pas, mais les améliorations des performances doivent être pondérées par rapport aux coûts de maintenance.

DISTKEY (nom_colonne)

Contrainte qui spécifie la colonne à utiliser comme clé de distribution de la table. Vous pouvez utiliser le mot-clé DISTKEY après un nom de colonne ou dans le cadre de la définition de la table à l’aide de la syntaxe DISTKEY (nom_colonne). Les deux méthodes ont le même effet. Pour plus d’informations, consultez le paramètre DISTSTYLE plus haut dans cette rubrique.

[COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ]

Spécifie une ou plusieurs clés de tri pour la table. Lorsque les données sont chargées dans la table, les données sont triées sur les colonnes désignées comme clés de tri. Vous pouvez utiliser le mot-clé SORTKEY après un nom de colonne pour spécifier une clé de tri à une seule colonne ou vous pouvez spécifier une ou plusieurs colonnes comme colonnes de clé de tri de la table à l’aide de la syntaxe SORTKEY (column_name [ , ... ] ).

Vous pouvez spécifier le cas échéant le style de tri COMPOUND ou INTERLEAVED. Si vous spécifiez SORTKEY avec des colonnes, la valeur par défaut est COMPUND. Pour plus d'informations, consultez Clés de tri.

Si vous ne spécifiez pas d’options de clé de tri, la valeur par défaut est AUTO.

Vous pouvez définir un maximum de 400 colonnes COMPOUND SORTKEY ou de 8 colonnes INTERLEAVED SORTKEY par table.

AUTO

Spécifie qu’Amazon Redshift attribue une clé de tri optimale en fonction des données de la table. Par exemple, si la clé de tri AUTO est spécifiée, Amazon Redshift n’affecte initialement aucune clé de tri à une table. Si Amazon Redshift détermine qu’une clé de tri améliorera les performances des requêtes, Amazon Redshift peut modifier la clé de tri de votre table. Le tri de la table est effectué par tri automatique de la table. Pour plus d'informations, consultez Tri automatique des tables.

Amazon Redshift ne modifie pas les tables qui possèdent des clés de tri ou de distribution existantes, à une exception près : si une table possède une clé de distribution qui n’a jamais été utilisée dans une requête JOIN, la clé peut être modifiée si Amazon Redshift détermine qu’il en existe une meilleure.

Pour afficher la clé de tri d'une table, interrogez la vue catalogue système SVV__TABLE_INFO. Pour plus d'informations, consultez SVV_TABLE_INFO. Pour afficher les recommandations Amazon Redshift Advisor pour les tables, recherchez la vue catalogue système SVV_ALTER_TABLE_RECOMMENDATIONS. Pour plus d'informations, consultez SVV_ALTER_TABLE_RECOMMENDATIONS. Pour afficher les actions effectuées par Amazon Redshift, interrogez la vue catalogue système SVL_AUTO_WORKER_ACTION. Pour plus d'informations, consultez SVL_AUTO_WORKER_ACTION.

COMPOUND

Spécifie que les données sont triées à l’aide d’une clé composée, constituée de toutes les colonnes affichées, dans leur ordre d’apparition. Une clé de tri composée est surtout utile lorsqu’une requête analyse les lignes selon l’ordre des colonnes de tri. Les avantages en termes de performances d’un tri avec une clé composée diminuent lorsque les requêtes reposent sur des colonnes de tri secondaires. Vous pouvez définir un maximum de 400 colonnes COMPOUND SORTKEY par table.

INTERLEAVED

Spécifie que les données sont triées à l’aide d’une clé de tri entrelacée. Un maximum de huit colonnes peut être spécifié pour une clé de tri entrelacée.

Comme un tri entrelacé confère un poids égal à chaque colonne, ou sous-ensemble de colonnes, de la clé de tri, les requêtes ne dépendent pas de l’ordre des colonnes de la clé de tri. Quand une requête utilise une ou plusieurs colonnes de tri secondaires, le tri entrelacé améliore les performances des requêtes de façon significative. Le tri entrelacé entraîne un léger coût de traitement pour les opérations de chargement de données et les opérations VACUUM.

Important

N’utilisez pas de clé de tri entrelacée sur les colonnes qui contiennent des attributs qui augmentent de façon monotone, tels que les colonnes d’identité, les dates ou les horodatages.

ENCODE AUTO

Permet à Amazon Redshift d’ajuster automatiquement le type d’encodage pour toutes les colonnes de la table afin d’optimiser les performances des requêtes. ENCODE AUTO conserve les types d’encodage initiaux que vous spécifiez lors de la création de la table. Ensuite, si Amazon Redshift détermine qu’un nouveau type d’encodage peut améliorer les performances de la requête, Amazon Redshift peut modifier le type d’encodage des colonnes de la table. ENCODE AUTO est la valeur par défaut si vous ne spécifiez de type d’encodage pour aucune colonne de la table.

UNIQUE (nom_colonne [,...])

Contrainte qui spécifie qu’un groupe d’une ou de plusieurs colonnes d’une table ne peut contenir que des valeurs uniques. Le comportement de la contrainte de table unique est identique à celui des contraintes de colonne, avec la capacité supplémentaire de s’étendre sur plusieurs colonnes. Dans le contexte des contraintes uniques, les valeurs null ne sont pas considérées comme égales. Chaque contrainte de table unique doit nommer un ensemble de colonnes différent de l’ensemble de colonnes nommées par une autre contrainte de clé unique ou de clé primaire définie pour la table.

Important

Les contraintes d’unicité ont une valeur informationnelle et ne sont pas appliquées par le système.

PRIMARY KEY (nom_colonne [,...])

Contrainte qui spécifie qu’une colonne ou un nombre de colonnes d’une table ne peut contenir que des valeurs non null (non dupliquées) uniques. L’identification d’un ensemble de colonnes comme clé primaire fournit aussi les métadonnées relatives à la conception du schéma. Une clé primaire implique que d’autres tables puissent se reposer sur cet ensemble de colonnes comme identificateur unique des lignes. Une clé primaire peut être spécifiée pour une table, que ce soit comme contrainte de colonne ou contrainte de table. La contrainte de clé primaire doit nommer un ensemble de colonnes différent des autres ensembles de colonnes nommés pour une contrainte unique définie pour la même table.

Important

Les contraintes de clé primaire ont uniquement un but informatif. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur.

FOREIGN KEY ( nom_colonne [, ... ] ) REFERENCES table_réf [ ( colonne_réf ) ]

Contrainte qui spécifie une contrainte de clé étrangère, laquelle nécessite qu’un groupe d’une ou de plusieurs colonnes de la nouvelle table ne doit contenir que des valeurs qui correspondent à des valeurs des colonnes référencées d’une ligne de la table référencée. Si colonne_réf est omis, la clé primaire de table_réf est utilisée. Les colonnes référencées doivent être les colonnes d’une contrainte de clé unique ou de clé primaire de la table référencée.

Important

Les contraintes de clé étrangère ont un but informatif uniquement. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur.

Notes d’utilisation

Les contraintes d’unicité, de clé primaire et de clé externe sont uniquement informatives ; elles ne sont pas appliquées par Amazon Redshift lorsque vous remplissez une table. Par exemple, si vous insérez des données dans une table avec des dépendances, l’insertion peut réussir même si elle enfreint la contrainte. Néanmoins, les clés primaires et les clés étrangères servent de conseils de planification et doivent être déclarées si votre processus ETL ou un autre processus de votre application impose leur intégrité. Pour plus d’informations sur la manière de supprimer une table avec des dépendances, consultez DROP TABLE.

Limites et quotas

Tenez compte des limites suivantes lorsque vous créez une table.

  • Il existe une limite pour le nombre maximal de tables dans un cluster par type de nœud. Pour plus d’informations, consultez Limites dans le Guide de gestion Amazon Redshift.

  • Le nombre maximal de caractères pour un nom de table est 127.

  • Le nombre maximal de colonnes que vous pouvez définir dans une seule table est de 1 600.

  • Le nombre maximal de colonnes SORTKEY que vous pouvez définir dans une seule table est de 400.

Résumé des paramètres de niveau colonne et des paramètres de niveau table

Plusieurs attributs et paramètres peuvent être définis au niveau colonne ou au niveau table. Dans certains cas, la définition d’un attribut ou d’une contrainte au niveau colonne ou au niveau table a le même effet. Dans d’autres cas, elles produisent des résultats différents.

La liste suivante résume les paramètres de niveau colonne et de niveau de la table :

DISTKEY

Il n’y a pas de différence effective que la définition soit au niveau colonne ou au niveau table.

Si DISTKEY est défini, au niveau colonne ou au niveau table, DISTSTYLE doit être défini sur KEY ou ne pas l’être du tout. DISTSTYLE peut être défini au niveau table uniquement.

SORTKEY

Si la définition est au niveau colonne, SORTKEY doit être une colonne unique. Si SORTKEY est défini au niveau table, une ou plusieurs colonnes peuvent constituer une clé de tri composée ou une clé de tri composite entrelacée.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

Amazon Redshift ne prend pas en charge la modification de la configuration de sensibilité à la casse pour une colonne. Lorsque vous ajoutez une nouvelle colonne à la table, Amazon Redshift utilise la valeur par défaut pour la sensibilité à la casse. Amazon Redshift ne prend pas en charge le mot clé COLLATE lors de l’ajout d’une nouvelle colonne.

Pour obtenir des informations sur la création de bases de données à l'aide du classement de bases de données, consultez CREATE DATABASE.

Pour obtenir des informations sur la fonction COLLATE, consultez Fonction COLLATE.

UNIQUE

Au niveau colonne, une ou plusieurs clés peuvent être définies comme UNIQUE ; la contrainte UNIQUE s’applique à chaque colonne individuellement. Si UNIQUE est défini au niveau table, une ou plusieurs colonnes peuvent constituer une contrainte UNIQUE composite.

PRIMARY KEY

Si la définition est au niveau colonne, PRIMARY KEY doit être une colonne unique. Si PRIMARY KEY est défini au niveau de la table, une ou plusieurs colonnes peuvent constituent une clé primaire composite.

FOREIGN KEY

Il n’y a pas de différence effective que FOREIGN KEY soit défini au niveau colonne ou au niveau table. Au niveau colonne, la syntaxe est simplement REFERENCES table_réf [ ( colonne_réf )].

Distribution des données entrantes

Lorsque le schéma de distribution de hachage des données entrantes correspond à celui de la table cible, aucune distribution physique des données n’est réellement nécessaire lors du chargement des données. Par exemple, si une clé de distribution est définie pour la nouvelle table et que les données sont insérées à partir d’une autre table qui est distribuée sur la même colonne de clé, les données sont chargées en place, à l’aide des mêmes nœuds et tranches. Cependant, si les tables source et cible sont toutes deux définies sur la distribution EVEN, les données sont redistribuées dans la table cible.

Tables larges

Vous pourrez créer une table très grande, mais ne pas pouvoir effectuer le traitement de requêtes, telles que les instructions INSERT ou SELECT, sur la table. La largeur maximale d’une table avec des colonnes de largeur fixe, telles que CHAR, est de 64 Ko - 1 (soit 65 535 octets). Si une table inclut des colonnes VARCHAR, la table peut avoir une grandeur déclarée plus élevée sans renvoyer une erreur, car la pleine grandeur déclarée des colonnes VARCHARS n’intervient pas dans la limite calculée de traitement des requêtes. La limite effective de traitement des requêtes avec les colonnes VARCHAR varie selon un certain nombre de facteurs.

Si une table est trop large pour l’insertion ou la sélection, vous recevez l’erreur suivante.

ERROR: 8001 DETAIL: The combined length of columns processed in the SQL statement exceeded the query-processing limit of 65535 characters (pid:7627)

Exemples

Pour des exemples montrant comment utiliser la commande CREATE TABLE, consultez Exemples.