Mise en route avec Amazon Redshift Spectrum - 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.

Mise en route avec Amazon Redshift Spectrum

Dans ce tutoriel, vous apprenez à utiliser Amazon Redshift Spectrum pour interroger des données directement à partir de fichiers sur Amazon S3. Si vous possédez déjà un cluster et un SQL client, vous pouvez suivre ce didacticiel avec une configuration minimale.

Note

Les requêtes Redshift Spectrum engendrent des frais supplémentaires. Le coût inhérent à l’exécution des exemples de requêtes de ce tutoriel est minime. Pour plus d’informations sur la tarification, consultez Tarification Amazon Redshift Spectrum.

Prérequis

Pour utiliser Redshift Spectrum, vous avez besoin d'un cluster Amazon Redshift et SQL d'un client connecté à votre cluster afin de pouvoir exécuter des commandes. SQL Le cluster et les fichiers de données dans Amazon S3 doivent se trouver dans la même Région AWS.

Pour plus d'informations sur la création d'un cluster Amazon Redshift, consultez la section Commencer avec les entrepôts de données provisionnés Amazon Redshift dans le guide de démarrage Amazon Redshift. Pour plus d'informations sur les méthodes de connexion à un cluster, consultez la section Connexion aux entrepôts de données Amazon Redshift dans le guide de démarrage Amazon Redshift.

Dans certains des exemples qui suivent, les données d’exemple se trouvent dans la région USA Est (Virginie du Nord) (us-east-1) et vous avez donc besoin d’un cluster qui figure également dans us-east-1. Vous pouvez également utiliser Amazon S3 pour copier des objets de données depuis les compartiments et dossiers suivants vers votre compartiment Région AWS où se trouve votre cluster :

  • s3://redshift-downloads/tickit/spectrum/customers/*

  • s3://redshift-downloads/tickit/spectrum/sales_partition/*

  • s3://redshift-downloads/tickit/spectrum/sales/*

  • s3://redshift-downloads/tickit/spectrum/salesevent/*

Exécutez une commande Amazon S3 similaire à la suivante pour copier les données d’exemple situées dans la région USA Est (Virginie du Nord) vers votre Région AWS. Avant d’exécuter cette commande, créez votre compartiment et vos dossiers dans votre compartiment pour qu’ils correspondent à votre commande de copie Amazon S3. Le résultat de la commande de copie d'Amazon S3 confirme que les fichiers sont copiés dans bucket-name dans le format que vous souhaitez Région AWS.

aws s3 cp s3://redshift-downloads/tickit/spectrum/ s3://bucket-name/tickit/spectrum/ --copy-props none --recursive

Commencer à utiliser Redshift Spectrum en utilisant AWS CloudFormation

Comme alternative aux étapes suivantes, vous pouvez accéder au DataLake AWS CloudFormation modèle Redshift Spectrum pour créer une pile avec un compartiment Amazon S3 que vous pouvez interroger. Pour de plus amples informations, veuillez consulter Lancez votre AWS CloudFormation stack, puis interrogez vos données dans Amazon S3.

Mise en route avec Amazon Redshift Spectrum étape par étape

Suivez ces étapes pour commencer à utiliser Amazon Redshift Spectrum :

Étape 1. Création d'un IAM rôle pour Amazon Redshift

Votre cluster a besoin d'une autorisation pour accéder à votre catalogue de données externe dans AWS Glue Amazon Athena et à vos fichiers de données dans Amazon S3. Pour fournir cette autorisation, vous faites référence à un rôle AWS Identity and Access Management (IAM) attaché à votre cluster. Pour plus d'informations sur l'utilisation des rôles avec Amazon Redshift, consultez Autorisation COPY et UNLOAD opérations à l'aide de rôles. IAM

Note

Dans certains cas, vous pouvez migrer votre catalogue de données Athena vers un catalogue de AWS Glue données. Vous pouvez le faire si votre cluster se trouve dans une AWS région prise en charge et si le catalogue de données Athena contient des tables externes Redshift Spectrum. AWS Glue Pour utiliser le catalogue de AWS Glue données avec Redshift Spectrum, vous devrez peut-être modifier vos IAM politiques. Pour plus d’informations, consultez Mise à niveau vers le catalogue de données AWS Glue dans le Guide de l’utilisateur Athena.

Lorsque vous créez un rôle pour Amazon Redshift, choisissez une des approches suivantes :

Pour créer un IAM rôle pour Amazon Redshift
  1. Ouvrez la IAMconsole.

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

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

  4. Choisissez Service AWS comme entité de confiance, puis choisissez Redshift comme cas d’utilisation.

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

  6. La page Add permissions policy (Ajouter une politique d’autorisations) s’affiche. Choisissez AmazonS3ReadOnlyAccess etAWSGlueConsoleFullAccess, si vous utilisez le catalogue AWS Glue de données. Ou choisissez AmazonAthenaFullAccess si vous utilisez le catalogue de données Athena. Choisissez Suivant.

    Note

    La politique AmazonS3ReadOnlyAccess accorde à votre cluster un accès en lecture seule à tous les compartiments Amazon S3. Pour accorder l'accès uniquement à l' AWS exemple de compartiment de données, créez une nouvelle politique et ajoutez les autorisations suivantes.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::redshift-downloads/*" } ] }
  7. Pour Nom du rôle, indiquez le nom de votre rôle, par exemple myspectrum_role.

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

  9. Dans le panneau de navigation, choisissez Roles (Rôles). Choisissez le nom de votre nouveau rôle pour afficher le résumé, puis copiez le rôle dans ARN votre presse-papiers. Cette valeur est le nom de ressource Amazon (ARN) du rôle que vous venez de créer. Vous utilisez cette valeur lorsque vous créez des tables externes pour référencer vos fichiers de données sur Amazon S3.

Pour créer un IAM rôle pour Amazon Redshift à l'aide d'un AWS Glue Data CatalogAWS Lake Formation
  1. Ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/.

  2. Dans le panneau de navigation, choisissez Politiques.

    Si vous sélectionnez Politiques pour la première fois, la page Bienvenue dans les politiques gérées s’affiche. Sélectionnez Get started (Mise en route).

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

  4. Choisissez de créer la politique dans l'JSONonglet.

  5. Collez le document de JSON politique suivant, qui donne accès au catalogue de données mais refuse les autorisations d'administrateur pour Lake Formation.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftPolicyForLF", "Effect": "Allow", "Action": [ "glue:*", "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
  6. Lorsque vous avez terminé, choisissez Review (Vérifier) pour vérifier la politique. Le programme de validation des politiques signale les éventuelles erreurs de syntaxe.

  7. Sur la page Vérifier la politique, dans le champ Nom, saisissez myspectrum_policy pour nommer la politique que vous créez. (Facultatif) Entrez une description. Vérifiez le récapitulatif de politique pour voir les autorisations accordées par votre politique. Sélectionnez ensuite Créer une politique pour enregistrer votre travail.

    Une fois que vous avez créé une politique, vous pouvez fournir un accès à vos utilisateurs.

Pour activer l’accès, ajoutez des autorisations à vos utilisateurs, groupes ou rôles :

Pour accorder SELECT des autorisations sur la table afin d'effectuer des requêtes dans la base de données Lake Formation
  1. Ouvrez la console Lake Formation à l'adresse https://console.aws.amazon.com/lakeformation/.

  2. Dans le volet de navigation, sélectionnez Autorisations de lac de données, puis Accorder.

  3. Suivez les instructions de la page Octroi d’autorisations de table à l’aide de la méthode de ressource nommée dans le Guide du développeur AWS Lake Formation . Saisissez les informations suivantes :

    • Pour IAMle rôle, choisissez le IAM rôle que vous avez créé,myspectrum_role. Lorsque vous exécutez l'éditeur de requêtes Amazon Redshift, celui-ci utilise ce IAM rôle pour autoriser l'accès aux données.

      Note

      Pour accorder SELECT l'autorisation d'effectuer des requêtes sur la table d'un catalogue de données compatible avec Lake Formation, procédez comme suit :

      • Enregistrez le chemin d’accès aux données dans Lake Formation.

      • Accordez les autorisations utilisateur sur ce chemin dans Lake Formation..

      • Les tables créées se trouvent dans le chemin enregistré dans Lake Formation..

  4. Choisissez Grant (Accorder).

Important

La bonne pratique consiste à n’autoriser l’accès qu’aux objets Amazon S3 sous-jacents par le biais des autorisations Lake Formation. Pour empêcher tout accès non approuvé, supprimez toute autorisation accordée aux objets Amazon S3 en dehors de Lake Formation. Si vous avez déjà accédé à des objets Amazon S3 avant de configurer Lake Formation, supprimez toutes les IAM politiques ou autorisations de compartiment précédemment définies. Pour plus d'informations, voir Mise à niveau AWS Glue des autorisations de données vers les autorisations du AWS Lake Formation modèle et de Lake Formation.

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

Vous disposez désormais d'un IAM rôle qui autorise Amazon Redshift à accéder au catalogue de données externe et à Amazon S3 pour vous. At this point, you must associate that role with your Amazon Redshift cluster.

Pour associer un IAM rôle à un cluster
  1. Connectez-vous à la console Amazon Redshift AWS Management Console et ouvrez-la à l'adresse. https://console.aws.amazon.com/redshiftv2/

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

  3. Pour Actions, sélectionnez Gérer les IAM rôles. La page IAMdes rôles apparaît.

  4. Choisissez Entrée, ARN puis entrez un ARN ou un IAM rôle, ou choisissez un IAM rôle dans la liste. Choisissez ensuite Ajouter IAM un rôle pour l'ajouter à la liste des IAMrôles attachés.

  5. Choisissez OK pour associer le IAM rôle au cluster. Le cluster est modifié pour finaliser la modification.

Étape 3 : Création d’un schéma externe et d’une table externe

Créez des tables externes dans un schéma externe. Le schéma externe fait référence à une base de données dans le catalogue de données externe et fournit le IAM rôle ARN qui autorise votre cluster à accéder à Amazon S3 en votre nom. Vous pouvez créer une base de données externe dans un catalogue de données Amazon Athena ou dans un métastore Apache Hive, tel qu'Amazon. AWS Glue Data Catalog EMR Pour cet exemple, vous créez la base de données externe dans un catalogue de données Amazon Athena lorsque vous créez le schéma externe Amazon Redshift. Pour de plus amples informations, consultez Schémas externes dans Amazon Redshift Spectrum.

Pour créer un schéma externe et une table externe
  1. Pour créer un schéma externe, remplacez le IAM rôle ARN dans la commande suivante par le rôle ARN que vous avez créé à l'étape 1. Exécutez ensuite la commande dans votre SQL client.

    create external schema myspectrum_schema from data catalog database 'myspectrum_db' iam_role 'arn:aws:iam::123456789012:role/myspectrum_role' create external database if not exists;
  2. Pour créer une table externe, exécutez la CREATE EXTERNAL TABLE commande suivante.

    Note

    Votre cluster et le compartiment Amazon S3 doivent se trouver dans la même Région AWS. Pour cet exemple de CREATE EXTERNAL TABLE commande, le compartiment Amazon S3 contenant les exemples de données se trouve dans l'est des États-Unis (Virginie du Nord) Région AWS. Pour voir les données sources, téléchargez le fichier sales_ts.000. .

    Vous pouvez modifier cet exemple pour l'exécuter dans un autre Région AWS. Créez un compartiment Amazon S3 dans le compartiment de votre choix Région AWS. Copiez les données de vente à l’aide d’une commande de copie Amazon S3. Ensuite, mettez à jour l’option d’emplacement dans l’exemple de commande CREATE EXTERNAL TABLE sur votre compartiment.

    aws s3 cp s3://redshift-downloads/tickit/spectrum/sales/ s3://bucket-name/tickit/spectrum/sales/ --copy-props none --recursive

    Le résultat de la commande de copie d'Amazon S3 confirme que le fichier a été copié dans bucket-name dans le format que vous souhaitez Région AWS.

    copy: s3://redshift-downloads/tickit/spectrum/sales/sales_ts.000 to s3://bucket-name/tickit/spectrum/sales/sales_ts.000
    create external table myspectrum_schema.sales( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp) row format delimited fields terminated by '\t' stored as textfile location 's3://redshift-downloads/tickit/spectrum/sales/' table properties ('numRows'='172000');

Étape 4 : Interrogation de vos données dans Amazon S3

Une fois vos tables externes créées, vous pouvez les interroger à l'aide des mêmes SELECT instructions que celles que vous utilisez pour interroger d'autres tables Amazon Redshift. Ces requêtes SELECT d'instructions incluent la jointure de tables, l'agrégation de données et le filtrage sur des prédicats.

Pour interroger vos données dans Amazon S3
  1. Obtenez le nombre de lignes dans le MYSPECTRUM _SCHEMA. SALEStable.

    select count(*) from myspectrum_schema.sales;
    count 
    ------
    172462
  2. En guise de bonne pratique, gardez vos plus grandes tables de faits dans Amazon S3 et vos plus petites tables de dimensions dans Amazon Redshift. Si vous avez chargé les exemples de données dans Charger des données, une table est nommée EVENT dans votre base de données. Si ce n'est pas le cas, créez la EVENT table à l'aide de la commande suivante.

    create table event( eventid integer not null distkey, venueid smallint not null, catid smallint not null, dateid smallint not null sortkey, eventname varchar(200), starttime timestamp);
  3. Chargez le EVENT tableau en remplaçant le IAM rôle ARN dans la COPY commande suivante par le rôle ARN que vous avez créé dansÉtape 1. Création d'un IAM rôle pour Amazon Redshift. Vous pouvez éventuellement télécharger et consulter les données source pour le allevents_pipe.txt depuis un compartiment Amazon S3 dans Région AWS us-east-1.

    copy event from 's3://redshift-downloads/tickit/allevents_pipe.txt' iam_role 'arn:aws:iam::123456789012:role/myspectrum_role' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-east-1';

    L'exemple suivant joint la table externe Amazon S3 MYSPECTRUM _SCHEMA. SALESavec le tableau Amazon Redshift local EVENT pour connaître le total des ventes des 10 principaux événements.

    select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
    eventid | sum     
    --------+---------
        289 | 51846.00
       7895 | 51049.00
       1602 | 50301.00
        851 | 49956.00
       7315 | 49823.00
       6471 | 47997.00
       2118 | 47863.00
        984 | 46780.00
       7851 | 46661.00
       5638 | 46280.00
  4. Affichez le plan de la requête précédente. Observez les étapes S3 Seq Scan, S3 HashAggregate et S3 Query Scan qui ont été exécutées par rapport aux données sur Amazon S3.

    explain select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
    QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan myspectrum_schema.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)

Lancez votre AWS CloudFormation stack, puis interrogez vos données dans Amazon S3

Une fois que vous avez créé un cluster Amazon Redshift et que vous vous y êtes connecté, vous pouvez installer votre DataLake AWS CloudFormation modèle Redshift Spectrum, puis interroger vos données.

CloudFormation installe le modèle Redshift Spectrum Getting DataLake Started et crée une pile contenant les éléments suivants :

  • Un rôle nommé myspectrum_role associé à votre cluster Redshift

  • Un schéma externe nommé myspectrum_schema

  • Une table externe nommée sales dans un compartiment Amazon S3

  • Une table Redshift nommée event chargée de données

Pour lancer votre stack Redshift Spectrum Getting Started DataLake CloudFormation
  1. Choisissez Launch CFN Stack. La CloudFormation console s'ouvre avec le modèle DataLake .yml sélectionné.

    Vous pouvez également télécharger et personnaliser le DataLake CloudFormation CFNmodèle Redshift Spectrum Getting Started, puis ouvrir CloudFormation la console (https://console.aws.amazon.com/cloudformation) et créer une pile avec le modèle personnalisé.

  2. Choisissez Suivant.

  3. Sous Parameters (Paramètres), saisissez le nom du cluster Amazon Redshift, le nom de base de données et le nom d’utilisateur de votre base de données.

  4. Choisissez Suivant.

    Les options de pile apparaissent.

  5. Choisissez Next (Suivant) pour accepter les paramètres par défaut.

  6. Passez en revue les informations et sous Capacités, puis sélectionnez Je reconnais que cela AWS CloudFormation pourrait créer IAM des ressources.

  7. Sélectionnez Créer la pile.

Si une erreur se produit pendant la création de la pile, consultez les informations suivantes :

  • Consultez l'onglet CloudFormation Événements pour obtenir des informations qui peuvent vous aider à résoudre l'erreur.

  • Supprimez la DataLake CloudFormation pile avant de recommencer l'opération.

  • Assurez-vous que vous êtes connecté à votre base de données Amazon Redshift.

  • Assurez-vous d’avoir saisi les informations correctes pour le nom de cluster Amazon Redshift, le nom de base de données et le nom d’utilisateur de la base de données.

Interrogez vos données dans Amazon S3

Vous interrogez les tables externes à l'aide SELECT des mêmes instructions que celles que vous utilisez pour interroger les autres tables Amazon Redshift. Ces requêtes SELECT d'instructions incluent la jointure de tables, l'agrégation de données et le filtrage sur des prédicats.

La requête suivante renvoie le nombre de lignes dans la table externe myspectrum_schema.sales.

select count(*) from myspectrum_schema.sales;
count 
------
172462

Joindre une table externe à une table locale

L’exemple suivant joint la table externe myspectrum_schema.sales à la table locale event afin de déterminer le total des ventes pour les 10 principaux événements.

select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
eventid | sum     
--------+---------
    289 | 51846.00
   7895 | 51049.00
   1602 | 50301.00
    851 | 49956.00
   7315 | 49823.00
   6471 | 47997.00
   2118 | 47863.00
    984 | 46780.00
   7851 | 46661.00
   5638 | 46280.00

Afficher le plan de requêtes

Affichez le plan de la requête précédente. Observez les étapes S3 Seq Scan, S3 HashAggregate et S3 Query Scan qui ont été exécutées par rapport aux données sur Amazon S3.

explain select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)