Notes d’utilisation - 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.

Notes d’utilisation

Cette rubrique contient des notes d’utilisation pour CREATE EXTERNAL TABLE. Vous ne pouvez pas afficher les détails des tables Amazon Redshift Spectrum en utilisant les mêmes ressources que celles que vous utilisez pour les tables Amazon Redshift standard, PG_TABLE_DEF STV_TBL_PERM telles queCLASS, PG_ ou information_schema. Si votre outil de Business Intelligence ou d’analyse ne reconnaît pas les tables externes Redshift Spectrum, configurez votre application de façon à interroger SVV_EXTERNAL_TABLES et SVV_EXTERNAL_COLUMNS.

CREATEEXTERNALTABLECOMME

Dans certains cas, vous pouvez exécuter la commande CREATE EXTERNAL TABLE AS sur un AWS Glue Catalogue de données, AWS Lake Formation catalogue externe ou métastore Apache Hive. Dans de tels cas, vous utilisez un AWS Identity and Access Management (IAM) rôle pour créer le schéma externe. Ce IAM rôle doit disposer d'autorisations de lecture et d'écriture sur Amazon S3.

Si vous utilisez un catalogue Lake Formation, le IAM rôle doit être autorisé à créer une table dans le catalogue. Dans ce cas, il doit également disposer de l’autorisation d’emplacement du lac de données sur le chemin Amazon S3 cible. Ce IAM rôle devient le propriétaire du nouveau AWS Lake Formation table.

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 CREATE EXTERNAL TABLE AS :

  • L’emplacement Amazon S3 doit être vide.

  • Amazon Redshift prend en charge PARQUET et TEXTFILE formate uniquement lors de l'utilisation de la clause STORED AS.

  • Vous n’avez pas besoin de définir une liste de définitions de colonne. Les noms de colonnes et les types de données de colonne de la nouvelle table externe sont dérivés directement de la SELECT requête.

  • Il n'est pas nécessaire de définir le type de données de la colonne de partition dans la clause PARTITIONED BY. Si vous spécifiez une clé de partition, le nom de cette colonne doit figurer dans le résultat de la SELECT requête. Lorsque vous avez plusieurs colonnes de partition, leur ordre dans la SELECT requête n'a pas d'importance. Amazon Redshift utilise l'ordre défini dans la clause PARTITIONED BY pour créer la table externe.

  • Amazon Redshift partitionne automatiquement les fichiers de sortie dans des dossiers de partition en fonction des valeurs de clé de partition. Par défaut, Amazon Redshift supprime les colonnes de partition des fichiers de sortie.

  • La LINES TERMINATED clause « délimiteur » BY n'est pas prise en charge.

  • La clause ROW FORMAT SERDE « serde_name » n'est pas prise en charge.

  • L’utilisation de fichiers manifestes n’est pas prise en charge. Ainsi, vous ne pouvez pas définir la LOCATION clause dans un fichier manifeste sur Amazon S3.

  • Amazon Redshift met automatiquement à jour la propriété de table numRows « » à la fin de la commande.

  • La propriété de table « compression_type » accepte uniquement « none » ou « snappy » comme format de fichier. PARQUET

  • Amazon Redshift n'autorise pas la LIMIT clause dans la requête externeSELECT. Vous pouvez plutôt utiliser une LIMIT clause imbriquée.

  • Vous pouvez utiliser STL UNLOAD _ _ LOG pour suivre les fichiers écrits sur Amazon S3 par chaque opération CREATE EXTERNAL TABLE AS.

Autorisations pour créer et interroger des table externes

Pour créer des tables externes, vérifiez que vous êtes le propriétaire du schéma externe ou un superutilisateur. Pour transférer la propriété d’un schéma externe, utilisez ALTER SCHEMA. L’exemple suivant remplace le propriétaire du schéma spectrum_schema par newowner.

alter schema spectrum_schema owner to newowner;

Pour exécuter une requête Redshift Spectrum, vous devez avoir les autorisations suivantes :

  • Autorisations d’utilisation du schéma

  • Autorisation de créer des tables temporaires dans la base de données actuelle

L’exemple suivant accorde l’autorisation d’utiliser le schéma spectrum_schema au groupe d’utilisateurs spectrumusers.

grant usage on schema spectrum_schema to group spectrumusers;

L’exemple suivant accorde une autorisation temporaire concernant la base de données spectrumdb au groupe d’utilisateurs spectrumusers.

grant temp on database spectrumdb to group spectrumusers;

Pseudocolonnes

Par défaut, Amazon Redshift crée les tables externes avec les pseudo-colonnes $path et $size. Sélectionnez ces colonnes pour afficher le chemin d’accès aux fichiers de données sur Amazon S3 et la taille des fichiers de données de chaque ligne retournée par une requête. Les noms de colonne $path et $size doivent être délimités par des guillemets doubles. Une clause SELECT* ne renvoie pas les pseudocolonnes. Vous devez inclure explicitement les noms de colonne $path et $size dans votre requête, comme l’illustre l’exemple suivant.

select "$path", "$size" from spectrum.sales_part where saledate = '2008-12-01';

Vous pouvez désactiver la création de pseudo-colonnes d’une séance en définissant le paramètre de configuration spectrum_enable_pseudo_columns avec la valeur false.

Important

La sélection de $size ou $path entraîne des frais, car Redshift Spectrum analyse les fichiers de données dans Amazon S3 pour déterminer la taille du jeu de résultats. Pour plus d'informations, consultez la section Tarification Amazon Redshift.

Définition des options de gestion des données

Vous pouvez définir des paramètres de table pour spécifier la gestion des entrées pour les données interrogées dans les tables externes, notamment :

  • Caractères excédentaires dans les colonnes contenant des données VARCHARCHAR,, et sous forme de chaîne. Pour plus d’informations, consultez la propriété de table externe surplus_char_handling.

  • Caractères non valides dans les colonnes contenant des données VARCHARCHAR,, et sous forme de chaîne. Pour plus d’informations, consultez la propriété de table externe invalid_char_handling.

  • Caractère de remplacement à utiliser lorsque vous spécifiez REPLACE la propriété de la table externeinvalid_char_handling.

  • Gestion des débordements de distribution dans les colonnes contenant des données entières et décimales. Pour plus d’informations, consultez la propriété de table externe numeric_overflow_handling.

  • Surplus_bytes_handling pour spécifier la gestion des entrées pour les octets excédentaires dans les colonnes contenant des données VARBYTE. Pour plus d’informations, consultez la propriété de table externe surplus_bytes_handling.