INSERT (table externe) - 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.

INSERT (table externe)

Insère les résultats d'une requête SELECT dans des tables externes existantes d'un catalogue externe, telles que for AWS Glue AWS Lake Formation, ou une métastore Apache Hive. Utilisez le même rôle AWS Identity and Access Management (IAM) que celui utilisé pour la commande CREATE EXTERNAL SCHEMA pour interagir avec les catalogues externes et Amazon S3.

Pour les tables non partitionnées, la commande INSERT (table externe) écrit les données à l’emplacement Amazon S3 défini dans la table, en fonction des propriétés de la table et du format de fichier spécifiés.

Pour les tables partitionnées, INSERT (table externe) écrit les données à l’emplacement Amazon S3 en fonction de la clé de partition spécifiée dans la table. Il enregistre également automatiquement les nouvelles partitions dans le catalogue externe une fois l’opération INSERT terminée.

Vous ne pouvez pas exécuter INSERT (table externe) dans un bloc de transactions (BEGIN ... END). Pour plus d’informations sur les transactions, consultez Isolement sérialisable.

Syntaxe

INSERT INTO external_schema.table_name { select_statement }

Paramètres

schéma_externe.nom_table

Nom d’un schéma externe existant et d’une table externe cible pour l’insertion.

select_statement

Instruction qui insère une ou plusieurs lignes dans la table externe en définissant une requête. Toutes les lignes produites par la requête sont écrites dans Amazon S3 au format texte ou Parquet, en fonction de la définition de la table. La requête doit renvoyer une liste de colonnes compatible avec les types de données de colonne de la table externe. Cependant, les noms des colonnes ne doivent pas obligatoirement correspondre.

Notes d’utilisation

Le nombre de colonnes de la requête SELECT doit être identique à la somme des colonnes de données et des colonnes de partition. L’emplacement et le type de données de chaque colonne de données doivent correspondre à ceux de la table externe. L’emplacement des colonnes de partition doit se trouver à la fin de la requête SELECT, dans le même ordre que celui utilisé pour les définir dans la commande CREATE EXTERNAL TABLE. Les noms des colonnes ne doivent pas obligatoirement correspondre.

Dans certains cas, vous pouvez exécuter la commande INSERT (table externe) sur un catalogue de données AWS Glue ou un métastore Hive. Dans le cas de AWS Glue, le rôle IAM utilisé pour créer le schéma externe doit disposer à la fois d'autorisations de lecture et d'écriture sur Amazon S3 et AWS Glue. Si vous utilisez un AWS Lake Formation catalogue, ce rôle IAM devient propriétaire de la nouvelle table Lake Formation. Ce rôle IAM doit au moins disposer des autorisations suivantes :

  • Autorisation SELECT, INSERT, UPDATE sur la table externe

  • Autorisation d’emplacement des données sur le chemin d’accès Amazon S3 de la table externe

Pour vous assurer que les noms de fichiers sont uniques, Amazon Redshift utilise le format suivant pour le nom de chaque fichier téléchargé dans Amazon S3 par défaut.

<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>.

Par exemple : 20200303_004509_810669_1007_0001_part_00.parquet.

Tenez compte des éléments suivants lors de l’exécution de la commande INSERT (table externe) :

  • Les tables externes qui ont un format autre que PARQUET ou TEXTFILE ne sont pas prises en charge.

  • Cette commande prend en charge les propriétés de table existantes telles que ’write.parallel’, ’write.maxfilesize.mb’, ’compression_type’ et ’serialization.null.format’. Pour mettre à jour ces valeurs, exécutez la commande ALTER TABLE SET TABLE PROPERTIES.

  • La propriété de table ’numRows’ est automatiquement mise à jour vers la fin de l’opération INSERT. La propriété de la table doit déjà être définie ou ajoutée à la table si elle n’a pas été créée par l’opération CREATE EXTERNAL TABLE AS.

  • La clause LIMIT n’est pas prise en charge dans la requête SELECT externe. A la place, utilisez une clause LIMIT imbriquée.

  • Vous pouvez utiliser la table STL_UNLOAD_LOG pour suivre les fichiers qui ont été écrits sur Amazon S3 par chaque opération INSERT (table externe).

  • Amazon Redshift prend en charge uniquement le chiffrement standard Amazon S3 pour INSERT (table externe).

Exemples d’opération INSERT (table externe)

L’exemple suivant insère les résultats de l’instruction SELECT dans la table externe.

INSERT INTO spectrum.lineitem SELECT * FROM local_lineitem;

L’exemple suivant insère les résultats de l’instruction SELECT dans une table externe partitionnée à l’aide d’un partitionnement statique. Les colonnes de partition sont codées de manière irréversible dans l’instruction SELECT. Les colonnes de partition doivent se trouver à la fin de la requête.

INSERT INTO spectrum.customer SELECT name, age, gender, 'May', 28 FROM local_customer;

L’exemple suivant insère les résultats de l’instruction SELECT dans une table externe partitionnée à l’aide d’un partitionnement dynamique. Les colonnes de partition ne sont pas codées de manière irréversible. Les données sont automatiquement ajoutées aux dossiers de partition existants ou aux nouveaux dossiers si une nouvelle partition est ajoutée.

INSERT INTO spectrum.customer SELECT name, age, gender, month, day FROM local_customer;