Nozioni di base su Amazon Redshift Spectrum - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Nozioni di base su Amazon Redshift Spectrum

In questo tutorial viene descritto come utilizzare Amazon Redshift Spectrum per eseguire le query sui dati direttamente dai file in Amazon S3. Se hai già un cluster e un SQL client, puoi completare questo tutorial con una configurazione minima.

Nota

Le query di Redshift Spectrum comportano dei costi supplementari. Quello relativo all'esecuzione delle query di esempio in questo tutorial è nominale. Per ulteriori informazioni sui prezzi, consulta Prezzi di Amazon Redshift Spectrum.

Prerequisiti

Per utilizzare Redshift Spectrum, sono necessari un cluster Amazon Redshift e SQL un client connesso al cluster in modo da poter eseguire i comandi. SQL Il cluster e i file di dati in Amazon S3 devono trovarsi nello stesso spazio Regione AWS.

Per informazioni su come creare un cluster Amazon Redshift, consulta la Guida introduttiva ai data warehouse con provisioning di Amazon Redshift nella Amazon Redshift Getting Started Guide. Per informazioni sulle modalità di connessione a un cluster, consulta Connecting to Amazon Redshift data warehouse nella Amazon Redshift Getting Started Guide.

In alcuni degli esempi che seguono, i dati di esempio si trovano nella regione Stati Uniti orientali (Virginia settentrionale) (us-east-1), quindi è necessario un cluster che si trova in us-east-1. In alternativa, puoi usare Amazon S3 per copiare oggetti di dati dai seguenti bucket e cartelle nel tuo bucket nel Regione AWS dove si trova il tuo 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/*

Esegui un comando Amazon S3 simile al seguente per copiare dati di esempio che si trovano negli Stati Uniti orientali (Virginia settentrionale) nel tuo Regione AWS. Prima di eseguire il comando, crea il bucket e le cartelle nel bucket in modo che corrispondano al comando di copia di Amazon S3. L'output del comando Amazon S3 copy conferma che i file vengono copiati nel bucket-name nel formato desiderato Regione AWS.

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

Guida introduttiva a Redshift Spectrum con AWS CloudFormation

In alternativa ai seguenti passaggi, puoi accedere a Redshift Spectrum DataLake AWS CloudFormation modello per creare uno stack con un bucket Amazon S3 su cui eseguire query. Per ulteriori informazioni, consulta Lancia il tuo AWS CloudFormation impila e poi interroga i tuoi dati in Amazon S3.

Nozioni di base su Redshift Spectrum graduale

Per iniziare a utilizzare Amazon Redshift Spectrum, completare la seguente procedura:

Fase 1: Crea un IAM ruolo per Amazon Redshift

Il cluster necessita dell'autorizzazione per accedere al catalogo dati esterno in AWS Glue o Amazon Athena e i tuoi file di dati in Amazon S3. Per fornire tale autorizzazione, fai riferimento a un AWS Identity and Access Management (IAM) ruolo collegato al cluster. Per ulteriori informazioni sull'uso dei ruoli con Amazon Redshift, consulta Authorizing COPY and UNLOAD Operations Using Roles. IAM

Nota

In alcuni casi, puoi migrare il tuo Athena Data Catalog su un AWS Glue Catalogo dati. Puoi farlo se il tuo cluster si trova in un AWS Regione in cui AWS Glue è supportato e sono presenti tabelle esterne Redshift Spectrum nell'Athena Data Catalog. Per utilizzare nuovamente il plugin AWS Glue Data Catalog con Redshift Spectrum, potrebbe essere necessario modificare le IAM policy. Per ulteriori informazioni, consulta Aggiornamento a AWS Glue Data Catalog nella Guida per l'utente di Athena.

Quando viene creato un ruolo per Amazon Redshift, scegliere uno dei seguenti approcci:

Creare un IAM ruolo per Amazon Redshift
  1. Apri la IAMconsole.

  2. Nel pannello di navigazione, seleziona Roles (Ruoli).

  3. Selezionare Create role (Crea ruolo).

  4. Scegliere AWS service come entità affidabile, quindi scegli Redshift come caso d'uso.

  5. In Caso d'uso per altro Servizi AWS, scegli Redshift - Personalizzabile, quindi scegli Avanti.

  6. Verrà visualizzata la pagina Allega la policy di autorizzazione. Scegli AmazonS3ReadOnlyAccess eAWSGlueConsoleFullAccess, se utilizzi il AWS Glue Catalogo dati. Oppure scegliere AmazonAthenaFullAccess se si utilizza il catalogo dati di Athena. Scegli Next (Successivo).

    Nota

    La policy AmazonS3ReadOnlyAccess concede al cluster l'accesso in sola lettura a tutti i bucket Amazon S3. Per concedere l'accesso solo a AWS sample data bucket, crea una nuova policy e aggiungi le seguenti autorizzazioni.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::redshift-downloads/*" } ] }
  7. Per Role name (Nome ruolo), digitare un nome per il ruolo, ad esempio myspectrum_role.

  8. Esaminare le informazioni, quindi scegliere Create role (Crea ruolo).

  9. Nel riquadro di navigazione, seleziona Ruoli. Scegli il nome del tuo nuovo ruolo per visualizzare il riepilogo, quindi copia il ruolo negli ARN appunti. Questo valore è l'Amazon Resource Name (ARN) per il ruolo che hai appena creato. Viene utilizzato quando si creano tabelle esterne per fare riferimento ai file di dati in Amazon S3.

Per creare un IAM ruolo per Amazon Redshift utilizzando un AWS Glue Data Catalog abilitato per AWS Lake Formation
  1. Apri la IAM console all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel pannello di navigazione, selezionare Policy.

    Se è la prima volta che selezioni Policy, verrà visualizzata la pagina Benvenuto nelle policy gestite. Seleziona Inizia.

  3. Scegli Create Policy (Crea policy).

  4. Scegli di creare la politica nella JSONscheda.

  5. Incolla il seguente documento di JSON policy, che concede l'accesso al Data Catalog ma nega le autorizzazioni di amministratore per Lake Formation.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftPolicyForLF", "Effect": "Allow", "Action": [ "glue:*", "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
  6. Una volta terminato, selezionare Review (Rivedi) per rivedere la policy. In Validatore di policy vengono segnalati eventuali errori di sintassi.

  7. Nella pagina Review policy (Rivedi policy), in Name (Nome) inserire myspectrum_policy per denominare la policy in fase di creazione. (Opzionale) Immettere una Description (descrizione). Consulta il Summary (Riepilogo) della policy per visualizzare le autorizzazioni concesse dalla policy. Seleziona Create policy (Crea policy) per salvare il proprio lavoro.

    Dopo aver creato la policy, è possibile fornire l'accesso agli utenti.

Per fornire l'accesso, aggiungi autorizzazioni ai tuoi utenti, gruppi o ruoli:

Per concedere SELECT le autorizzazioni sulla tabella per eseguire interrogazioni nel database Lake Formation
  1. Apri la console Lake Formation all'indirizzo https://console.aws.amazon.com/lakeformation/.

  2. Nel menu di navigazione scegli Autorizzazioni data lake, quindi seleziona Concedi.

  3. Segui le istruzioni in Concessione delle autorizzazioni alle tabelle utilizzando il metodo della risorsa denominato nel AWS Lake Formation Guida per gli sviluppatori. Inserisci le informazioni che seguono:

    • Per IAMruolo, scegli il IAM ruolo che hai creato,myspectrum_role. Quando esegui Amazon Redshift Query Editor, utilizza questo IAM ruolo per l'autorizzazione ai dati.

      Nota

      Per concedere l'SELECTautorizzazione per eseguire interrogazioni sulla tabella in un Data Catalog abilitato a Lake Formation, procedi come segue:

      • Registrare il percorso dei dati in Lake Formation.

      • Concedere agli utenti le autorizzazioni per quel percorso in Lake Formation.

      • Le tabelle create sono disponibili nel percorso registrato in Lake Formation.

  4. Scegli Concessione.

Importante

Come best practice, concedere l'accesso solo agli oggetti Amazon S3 sottostanti attraverso le autorizzazioni Lake Formation. Per evitare un accesso non approvato, rimuovere qualsiasi autorizzazione concessa agli oggetti Amazon S3 al di fuori di Lake Formation. Se in precedenza hai effettuato l'accesso agli oggetti Amazon S3 prima di configurare Lake Formation, rimuovi IAM le policy o le autorizzazioni dei bucket precedentemente impostate. Per ulteriori informazioni, consulta Upgrading AWS Glue Autorizzazioni relative ai dati per AWS Lake FormationAutorizzazioni Model e Lake Formation.

Fase 2: Associa il IAM ruolo al tuo cluster

Ora hai un IAM ruolo che autorizza Amazon Redshift ad accedere al Data Catalog esterno e ad Amazon S3 per te. A questo punto è necessario associare tale ruolo al proprio cluster Amazon Redshift.

Per associare un IAM ruolo a un cluster
  1. Accedere a AWS Management Console e apri la console Amazon Redshift all'indirizzo. https://console.aws.amazon.com/redshiftv2/

  2. Dal menu di navigazione scegliere Clusters (Cluster), quindi scegliere il cluster da aggiornare.

  3. Per Azioni, scegli Gestisci IAM ruoli. Viene visualizzata la pagina IAMdei ruoli.

  4. Scegli Invio ARN e quindi inserisci un ARN IAM ruolo oppure scegli un IAM ruolo dall'elenco. Quindi scegli Aggiungi IAM ruolo per aggiungerlo all'elenco dei IAMruoli collegati.

  5. Scegli Fine per associare il IAM ruolo al cluster. Il cluster viene modificare per completare la variazione.

Fase 3: creazione di uno schema esterno e di una tabella esterna

Creazione di tabelle esterne in uno schema esterno. Lo schema esterno fa riferimento a un database nel catalogo dati esterno e fornisce il IAM ruolo ARN che autorizza il cluster ad accedere ad Amazon S3 per tuo conto. Puoi creare un database esterno in un Amazon Athena Data Catalog, AWS Glue Data Catalog o un metastore Apache Hive, come Amazon. EMR Per questo esempio, viene creato un database esterno in un catalogo dati Amazon Athena quando viene creato lo schema esterno di Amazon Redshift. Per ulteriori informazioni, consultare Schemi esterni in Amazon Redshift Spectrum.

Per creare uno schema esterno e una tabella esterna
  1. Per creare uno schema esterno, sostituisci il IAM ruolo ARN nel comando seguente con il ruolo creato nel passaggio ARN 1. Quindi esegui il comando nel tuo 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. Per creare una tabella esterna, esegui il CREATE EXTERNAL TABLE comando seguente.

    Nota

    Il cluster e il bucket Amazon S3 devono trovarsi nello stesso ambiente Regione AWS. Per questo CREATE EXTERNAL TABLE comando di esempio, il bucket Amazon S3 con i dati di esempio si trova negli Stati Uniti orientali (Virginia settentrionale) Regione AWS. Per vedere i dati di origine, scarica il sales_ts.000file.

    È possibile modificare questo esempio per eseguirlo in un altro Regione AWS. Crea un bucket Amazon S3 nel formato desiderato Regione AWS. Copia i dati di vendita con un comando di copia Amazon S3. Aggiorna quindi l'opzione relativa alla posizione del bucket nel comando di esempio CREATE EXTERNAL TABLE impostando il bucket in uso.

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

    L'output del comando Amazon S3 copy conferma che il file è stato copiato nel bucket-name nel formato desiderato Regione 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');

Fase 4: Esecuzione di query sui dati in Amazon S3

Dopo aver creato le tabelle esterne, puoi interrogarle utilizzando le stesse SELECT istruzioni che usi per interrogare altre tabelle Amazon Redshift. Queste query di SELECT dichiarazione includono l'unione di tabelle, l'aggregazione di dati e il filtraggio dei predicati.

Come eseguire query sui dati in Amazon S3
  1. Ottieni il numero di righe in _. MYSPECTRUM SCHEMA SALEStavolo.

    select count(*) from myspectrum_schema.sales;
    count 
    ------
    172462
  2. Come best practice, lasciare le tabelle dei fatti più grandi in Amazon S3 e le tabelle con dimensioni più piccole in Amazon Redshift. Se hai caricato i dati di esempio in Load data, hai una tabella denominata EVENT nel tuo database. In caso contrario, create la EVENT tabella utilizzando il comando seguente.

    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. Caricate la EVENT tabella sostituendo il IAM ruolo ARN nel COPY comando seguente con il ruolo in ARN cui avete creatoFase 1: Crea un IAM ruolo per Amazon Redshift. Facoltativamente, puoi scaricare e visualizzare i dati di origine per allevents_pipe.txt da un bucket Amazon S3 in Regione 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'esempio seguente unisce la tabella esterna Amazon S3 _MYSPECTRUM. SCHEMA SALEScon la tabella locale di Amazon Redshift EVENT per trovare le vendite totali per i primi 10 eventi.

    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. Visualizza il piano delle query per la query precedente. Tenere presente le fasi S3 Seq Scan, S3 HashAggregate e S3 Query Scan eseguite sui dati in 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)

Lancia il tuo AWS CloudFormation impila e poi interroga i tuoi dati in Amazon S3

Dopo aver creato un cluster Amazon Redshift e esserti connesso al cluster, puoi installare Redshift Spectrum DataLake AWS CloudFormation modello e quindi interroga i tuoi dati.

CloudFormation installa il modello Redshift Spectrum Getting DataLake Started e crea uno stack che include quanto segue:

  • Un ruolo denominato myspectrum_role associato al cluster Redshift

  • Uno schema esterno denominato myspectrum_schema

  • Una tabella esterna denominata sales in un bucket Amazon S3

  • Una tabella Redshift denominata event caricata con dati

Per avviare lo stack Redshift Spectrum Getting Started DataLake CloudFormation
  1. Scegli Launch stack CFN. La CloudFormation console si apre con il template DataLake .yml selezionato.

    Puoi anche scaricare e personalizzare il DataLake CloudFormation CFNmodello Redshift Spectrum Getting Started, quindi aprire la CloudFormation console (https://console.aws.amazon.com/cloudformation) e creare uno stack con il modello personalizzato.

  2. Scegli Next (Successivo).

  3. In Parametri, inserisci il nome del cluster Amazon Redshift, il nome del database e il nome utente del database.

  4. Scegli Next (Successivo).

    Vengono visualizzate le opzioni della pila.

  5. Scegliere Successivo per accettare le impostazioni predefinite.

  6. Controlla le informazioni e nella sezione Funzionalità, quindi scegli Lo riconosco AWS CloudFormation potrebbe creare IAM risorse.

  7. Seleziona Crea stack.

Se si verifica un errore durante la creazione della pila, vedere le seguenti informazioni:

  • Visualizza la scheda CloudFormation Eventi per informazioni che possono aiutarti a risolvere l'errore.

  • Elimina lo DataLake CloudFormation stack prima di riprovare l'operazione.

  • Assicurarsi di essere connesso al database Amazon Redshift.

  • Assicurati di aver inserito le informazioni corrette per il nome del cluster Amazon Redshift, il nome del database e il nome utente del database.

Interroga i tuoi dati in Amazon S3

Puoi interrogare tabelle esterne utilizzando le stesse SELECT istruzioni che usi per interrogare altre tabelle Amazon Redshift. Queste query di SELECT dichiarazione includono l'unione di tabelle, l'aggregazione di dati e il filtraggio dei predicati.

La seguente query restituisce il numero di righe nella tabella esternamyspectrum_schema.sales.

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

Unisci una tabella esterna a una tabella locale

L'esempio seguente unisce la tabella esterna myspectrum_schema.sales alla tabella locale event per calcolare le vendite totali per i 10 eventi principali.

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

Visualizza il piano di interrogazione

Visualizza il piano delle query per la query precedente. Tenere presente le fasi S3 Seq Scan, S3 HashAggregate e S3 Query Scan eseguite nei dati in 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)