Interrogez les tables Amazon S3 depuis Amazon Redshift - Amazon Redshift

Amazon Redshift ne prendra plus en charge la création de nouveaux Python à UDFs partir du patch 198. UDFs Le Python existant continuera de fonctionner jusqu'au 30 juin 2026. Pour plus d’informations, consultez le billet de blog .

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.

Interrogez les tables Amazon S3 depuis Amazon Redshift

Amazon Redshift s'intègre aux compartiments de tables Amazon S3, ce qui vous permet d'accéder aux ressources des tables S3 à l'aide d'Amazon Redshift. Que vous débutiez ou que vous gériez des milliers de tables dans votre environnement Iceberg, les compartiments de tables simplifient la gestion des lacs de données à toutes les échelles. Pour plus d’informations, consultez Table buckets.

Cette rubrique explique comment démarrer avec Amazon S3 Tables et Redshift et comment accéder aux objets S3 Tables à l'aide d'Amazon Redshift.

Conditions préalables

Avant d'interroger les tables S3 depuis Amazon Redshift, vous devez intégrer les tables S3 à. AWS Glue Data Catalog Pour obtenir des instructions, consultez la section Intégration des tables Amazon S3 avec AWS Glue Data Catalog.

Une fois les tables S3 intégrées AWS Glue Data Catalog, les responsables IAM disposant des autorisations S3 Tables et AWS Glue IAM requises peuvent découvrir les tables S3 via le. AWS Glue Data Catalog

Note

La méthode 3 (awsdatacatalog monté automatiquement) comporte des prérequis supplémentaires. Consultez Méthode 3 : catalogue awsdatacatalog monté automatiquement pour plus de détails.

Interrogez les tables S3 depuis Amazon Redshift

Pour commencer à interroger les tables S3, procédez comme suit :

  • Étape 1 : créer un rôle IAM pour Amazon Redshift

  • Étape 2 : associer un rôle IAM à votre cluster Amazon Redshift

  • Étape 3 : interroger les tables S3 depuis Amazon Redshift

Étape 1 : créer un rôle IAM pour Amazon Redshift

Votre cluster a besoin d'une autorisation pour accéder au catalogue externe de tables S3 dans AWS Glue. Pour fournir cette autorisation, Amazon Redshift utilise un rôle IAM attaché à votre cluster. Créez un rôle IAM avec les autorisations de politique suivantes.

Note

Dans la politique et les exemples ci-dessous, remplacez us-west-2 par votre AWS région et 111122223333 par votre numéro de AWS compte.

Pour créer une politique, procédez comme suit :

  1. Ouvrez la console IAM à l’adresse https://console.aws.amazon.com/iam/.

  2. Dans le panneau de navigation, choisissez Politiques.

  3. Choisissez Create Policy (Créer une politique).

  4. Choisissez l'onglet JSON.

  5. Collez le document de politique JSON suivant :

    { "Version": "2012-10-17", "Statement": [ { "Sid": "GlueDataCatalogPermissions", "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetDatabase", "glue:GetTable", "glue:GetTables", "glue:UpdateTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog", "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog/*", "arn:aws:glue:us-west-2:111122223333:database/s3tablescatalog/*/*", "arn:aws:glue:us-west-2:111122223333:table/s3tablescatalog/*/*/*", "arn:aws:glue:us-west-2:111122223333:database/*", "arn:aws:glue:us-west-2:111122223333:table/*/*" ] }, { "Sid": "S3TablesDataAccessPermissions", "Effect": "Allow", "Action": [ "s3tables:GetTableBucket", "s3tables:GetNamespace", "s3tables:GetTable", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData", "s3tables:ListTableBuckets", "s3tables:CreateTable", "s3tables:PutTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:ListNamespaces", "s3tables:ListTables", "s3tables:DeleteTable" ], "Resource": [ "arn:aws:s3tables:us-west-2:111122223333:bucket/*", "arn:aws:s3tables:us-west-2:111122223333:bucket/*/table/*" ] } ] }
  6. Choisissez Examiner une politique.

  7. Sur la page Politique de révision, entrez GlueCatalogS3Tables_Policy le nom. Entrez éventuellement une description. Consultez le résumé de la politique, puis choisissez Créer une politique.

Pour créer un rôle IAM pour Amazon Redshift :

  1. Ouvrez la console IAM.

  2. Dans le panneau de navigation, choisissez Rôles.

  3. Sélectionnez Create role (Créer un rôle).

  4. Choisissez le AWS service comme entité de confiance, puis choisissez Redshift comme cas d'utilisation.

  5. Sous Cas d'utilisation pour d'autres AWS services, choisissez Redshift - Personnalisable, puis Next.

  6. Sur la page Ajouter des autorisations, joignez la GlueCatalogS3Tables_Policy politique que vous avez créée ci-dessus. Choisissez Suivant.

  7. Pour Nom du rôle, indiquez le nom de votre rôle, par exemple RedshiftS3TablesRole.

  8. Passez en revue les informations, puis choisissez Créer un rôle.

  9. Dans le panneau de navigation, choisissez Rôles. Choisissez le nom de votre nouveau rôle pour afficher le résumé, puis copiez l'ARN du rôle dans votre presse-papiers. Vous utiliserez cet ARN lors de la création de schémas externes pour les espaces de noms des tables S3.

Note

Limitez la portée à des ressources spécifiques en remplaçant le caractère générique par des noms de ressources Amazon exacts (ARNs).

Étape 2 : associer un rôle IAM à votre cluster Amazon Redshift

Associez le rôle IAM que vous avez configuré à l'étape 1 à votre cluster Amazon Redshift.

À l'aide de la console AWS de gestion :

  1. Connectez-vous à la console de AWS gestion et ouvrez la console Amazon Redshift à l'adresse. https://console.aws.amazon.com/redshiftv2/

  2. Dans le menu de navigation, choisissez Clusters, puis choisissez le cluster que vous souhaitez mettre à jour.

  3. Pour Actions, choisissez Gérer les rôles IAM pour afficher la liste actuelle des rôles IAM associés au cluster.

  4. Sur la page Gérer les rôles IAM, choisissez le rôle IAM à ajouter, puis choisissez Ajouter un rôle IAM.

  5. Choisissez Terminé pour enregistrer les changements.

À l'aide de la AWS CLI :

Exécutez la commande suivante pour associer un rôle IAM à un cluster ou à un espace de noms existant. Remplacez my-redshift-cluster ou my-redshift-namespace par votre identifiant de cluster ou votre espace de noms et 111122223333 par votre identifiant de AWS compte.

aws redshift modify-cluster-iam-roles \ --cluster-identifier my-redshift-cluster \ --add-iam-roles arn:aws:iam::111122223333:role/RedshiftS3TablesRole -- for serverless aws redshift-serverless update-namespace \ --namespace-name my-redshift-namespace \ --iam-roles "arn:aws:iam::111122223333:role/RedshiftS3TablesRole"

Pour plus d’informations, consultez Association des rôles IAM aux clusters dans le Guide de gestion Amazon Redshift.

Étape 3 : interroger les tables S3 depuis Amazon Redshift

Lorsque vous intégrez des tables S3 à AWS Glue Data Catalog, le service crée une structure de catalogue fédérée qui mappe les ressources des tables S3 aux objets du AWS Glue catalogue :

  • Un bucket de table S3 devient un catalogue dans le AWS Glue Data Catalog.

  • Un espace de noms S3 devient une AWS Glue base de données.

  • Une table S3 devient un objet de AWS Glue table.

L'intégration crée la hiérarchie suivante :

  • Catalogue fédéré : s3tablescatalog (créé automatiquement)

  • Catalogues enfants : chaque compartiment de table S3 devient un catalogue enfant souss3tablescatalog.

  • Bases de données : chaque espace de noms S3 au sein d'un compartiment de table devient une base de données.

  • Tables : chaque table S3 au sein d'un espace de noms devient une table.

Par exemple, si vous avez un compartiment de table S3 nommé analytics-bucket avec un espace de noms sales contenant une tabletransactions, le chemin complet dans le AWS Glue Data Catalog serait :s3tablescatalog/analytics-bucket/sales/transactions.

Création d'un lien vers une ressource

Avant d'utiliser l'une des trois méthodes de requête ci-dessous, vous devez créer un lien vers une ressource dans AWS Glue Data Catalog. Les liens de ressources permettent à Amazon Redshift de référencer les bases de données S3 Tables via le catalogue standard.

À l'aide de AWS Glue la console :

  1. Ouvrez la AWS Glue console à l'adresse https://console.aws.amazon.com/glue/.

  2. Dans le panneau de navigation, choisissez Databases (Bases de données).

  3. Choisissez Créer, puis cliquez sur Lien vers la ressource.

  4. Sur la page Créer un lien vers une ressource, fournissez les informations suivantes :

    • Nom du lien vers la ressource : entrez le nom du lien vers la ressource (par exemple,sales_resource_link).

    • Base de données partagée : entrez le chemin de la base de données S3 Tables (par exemple,s3tablescatalog/analytics-bucket/sales).

    • Propriétaire de la base de données partagée : entrez votre identifiant de AWS compte.

    • ID de catalogue de la base de données partagée : entrez l'ID de catalogue au format<account-id>:s3tablescatalog/<bucket-name>.

  5. Choisissez Créer.

À l'aide de la AWS CLI :

aws glue create-database \ --region us-west-2 \ --cli-input-json '{ "CatalogId": "111122223333", "DatabaseInput": { "Name": "sales_resource_link", "TargetDatabase": { "CatalogId": "111122223333:s3tablescatalog/analytics-bucket", "DatabaseName": "sales" } } }'

Cette commande crée un lien de ressource nommé sales_resource_link dans votre catalogue de AWS Glue données par défaut qui pointe vers la sales base de données dans le compartiment de table S3analytics-bucket.

Une fois les liens de ressources créés, Amazon Redshift propose trois méthodes pour interroger les tables S3. Choisissez la méthode qui convient le mieux à votre cas d'utilisation.

Note

Pour créer un lien de ressource au niveau de la base de données, l'administrateur Redshift doit avoir l'AWS Glue:CreateDatabaseautorisation d'accéder au catalogue par défaut et à la base de données en cours de création.

Méthode 1 : CRÉER UN SCHÉMA EXTERNE

CREATE EXTERNAL SCHEMAÀ utiliser pour créer un schéma externe qui fait référence à votre base de données S3 Tables. Cette méthode fournit un contrôle explicite sur la dénomination et la configuration des schémas.

Pour obtenir des informations complètes sur la syntaxe, consultez CREATE EXTERNAL SCHEMA dans le manuel Amazon Redshift Database Developer Guide.

Exemple

Utilisez le nom de la base de données et l'ID du catalogue indiqués à l'étape 3. Remplacez 111122223333 par votre identifiant de AWS compte.

CREATE EXTERNAL SCHEMA s3tables_schema FROM DATA CATALOG DATABASE 'sales_resource_link' IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole' REGION 'us-west-2' CATALOG_ID '111122223333'; SELECT * FROM s3tables_schema.transactions;

Méthode 2 : CRÉER UNE BASE DE DONNÉES À PARTIR DE L'ARN

À utiliser CREATE DATABASE avec la FROM ARN clause pour créer une base de données fédérée qui fait directement référence à votre lien de AWS Glue ressource. Cette méthode mappe automatiquement la AWS Glue base de données à une base de données Redshift.

Pour obtenir des informations complètes sur la syntaxe, consultez CREATE DATABASE dans le manuel Amazon Redshift Database Developer Guide.

Exemple

Remplacez 111122223333 par votre identifiant de AWS compte.

CREATE DATABASE s3tables_db FROM ARN 'arn:aws:glue:us-west-2:111122223333:database/sales_resource_link' WITH DATA CATALOG SCHEMA analytics_schema IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole'; SELECT * FROM s3tables_db.analytics_schema.transactions;

Méthode 3 : catalogue awsdatacatalog monté automatiquement

Amazon Redshift peut monter automatiquement des AWS Glue Data Catalog bases de données, y compris des liens de ressources S3 Tables, via la awsdatacatalog base de données. Cette méthode nécessite l'activation de l'accès fédéré à Spectrum (FAS) sur votre cluster.

Conditions préalables

Pour utiliser la awsdatacatalog base de données montée automatiquement, vous devez activer l'accès fédéré à Spectrum. Cela permet à Amazon Redshift d'utiliser des informations d'identification fédérées pour accéder AWS Glue Data Catalog à des sources de données externes.

Pour activer l'accès fédéré à Spectrum :

  1. Connectez-vous à votre cluster Redshift à l'aide d'une identité IAM avec les autorisations suivantes :

    • redshift:GetClusterCredentialsWithIAM(pour les clusters provisionnés) ou redshift-serverless:GetCredentials (pour les serveurs sans serveur)

    • AmazonS3ReadOnlyAccess

    • AWSGlueConsoleFullAccess

    • Autorisations S3 Tables (telles que définies à l'étape 1)

  2. Lorsque vous vous connectez avec une identité IAM, Amazon Redshift crée automatiquement un utilisateur de base de données préfixé IAM: par (pour les utilisateurs) IAMR: ou (pour les rôles).

  3. En tant qu'administrateur de cluster, accordez à l'utilisateur fédéré l'autorisation d'accéder au schéma externe. Remplacez my_user par votre rôle IAM ou votre nom d'utilisateur :

    GRANT ALL ON SCHEMA awsdatacatalog TO "IAMR:my_user";

Pour obtenir des instructions détaillées sur la configuration de l'accès fédéré, consultez la section Utilisation d'une identité fédérée pour gérer l'accès d'Amazon Redshift aux ressources locales et aux tables externes Amazon Redshift Spectrum dans le guide de gestion Amazon Redshift.

Tables de requêtes S3

Une fois l'accès fédéré configuré, vérifiez les schémas montés et interrogez vos tables S3.

Vérifiez les schémas montés :

SHOW SCHEMAS FROM DATABASE awsdatacatalog;

Interrogez les tables S3 en utilisant le nom du lien de ressource indiqué à l'étape 3 :

SELECT * FROM awsdatacatalog.sales_resource_link.transactions;