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 extérieure)
Insère les résultats d'une SELECT requête dans des tables externes existantes d'un catalogue externe AWS Glue AWS Lake Formation, telles que for ou une métastore Apache Hive. Utilisez le même rôle AWS Identity and Access Management (IAM) que celui utilisé pour la CREATE EXTERNAL SCHEMA commande afin d'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 table et du format de fichier spécifiés.
Pour les tables partitionnées, INSERT (table externe) écrit les données sur l'emplacement Amazon S3 conformément à la clé de partition spécifiée dans la table. Il enregistre également automatiquement les nouvelles partitions dans le catalogue externe une fois l'INSERTopération 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 SELECT requête 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 SELECT requête, dans l'ordre dans lequel elles ont été définies dans CREATE EXTERNAL TABLE la commande. Les noms des colonnes ne doivent pas obligatoirement correspondre.
Dans certains cas, vous souhaiterez peut-être exécuter la commande INSERT (table externe) sur un catalogue de AWS Glue données ou un métastore Hive. Dans le cas de AWS Glue, le IAM rôle 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 IAM rôle devient propriétaire de la nouvelle table Lake Formation. Ce IAM rôle doit au moins disposer des autorisations suivantes :
-
SELECTINSERT, UPDATE autorisation 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 points suivants lors de l'exécution de la commande INSERT (table externe) :
-
Tableaux externes dont le format n'est pas pris en charge PARQUET ou qui TEXTFILE ne sont pas pris 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 ALTER TABLE SET TABLE PROPERTIES commande.
-
La propriété de table numRows « » est automatiquement mise à jour vers la fin de l'INSERTopération. La propriété de 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 LIMIT clause n'est pas prise en charge dans la SELECT requête externe. Utilisez plutôt une LIMIT clause imbriquée.
-
Vous pouvez utiliser le STL_UNLOAD_LOG tableau pour suivre les fichiers écrits sur Amazon S3 par chaque opération INSERT (table externe).
Amazon Redshift prend uniquement en charge le chiffrement standard Amazon S3 pour INSERT (table externe).
INSERTexemples (table externe)
L'exemple suivant insère les résultats de l'SELECTinstruction dans le tableau externe.
INSERT INTO spectrum.lineitem SELECT * FROM local_lineitem;
L'exemple suivant insère les résultats de l'SELECTinstruction dans une table externe partitionnée à l'aide d'un partitionnement statique. Les colonnes de partition sont codées en dur dans l'SELECTinstruction. 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'SELECTinstruction dans une table externe partitionnée à l'aide du 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;