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 disponi già di un cluster e di un client SQL, puoi completare questo tutorial con un intervento minimo di impostazione.
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, è necessario disporre di un cluster Amazon Redshift e un client SQL connesso al cluster di modo che sia possibile eseguire i comandi SQL. Il cluster e i file di dati in Amazon S3 devono trovarsi nella stessa 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 utilizzare Amazon S3 per copiare oggetti di dati dai seguenti bucket e cartelle nel tuo bucket nel luogo in Regione AWS cui si trova il 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 i dati di esempio che si trovano negli Stati Uniti orientali (Virginia settentrionale) nel tua 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 bucket-name
nel file 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 al DataLake AWS CloudFormation modello Redshift Spectrum per creare uno stack con un bucket Amazon S3 su cui eseguire query. Per ulteriori informazioni, consulta Avvia lo AWS CloudFormation stack e quindi interroga i dati in Amazon S3.
Nozioni di base su Redshift Spectrum graduale
Per iniziare a utilizzare Amazon Redshift Spectrum, completare la seguente procedura:
Fase 1: Creazione di un ruolo IAM per Amazon Redshift
Il cluster necessita dell'autorizzazione per accedere al catalogo dati esterno in AWS Glue Amazon Athena e ai file di dati in Amazon S3. Per concedere questa autorizzazione, fare riferimento a un ruolo AWS Identity and Access Management (IAM) associato al cluster. Per ulteriori informazioni sull'utilizzo di ruoli con Amazon Redshift, consultare Autorizzazione delle operazioni COPY e UNLOAD tramite ruoli IAM.
Nota
In alcuni casi, puoi migrare il tuo Athena Data Catalog a AWS Glue un Data Catalog. Puoi farlo se il tuo cluster si trova in una AWS regione in cui AWS Glue è supportato e hai tabelle esterne Redshift Spectrum nell'Athena Data Catalog. Per utilizzare AWS Glue Data Catalog con Redshift Spectrum, potrebbe essere necessario modificare le policy IAM. Per ulteriori informazioni, consultare Aggiornamento del catalogo dati AWS Glue nella Guida per l'utente di Athena.
Quando viene creato un ruolo per Amazon Redshift, scegliere uno dei seguenti approcci:
Se utilizzi Redshift Spectrum con un Athena Data Catalog o AWS Glue Data Catalog, segui i passaggi descritti in. Come creare un ruolo IAM per Amazon Redshift
Se utilizzi Redshift Spectrum con un AWS Glue Data Catalog programma abilitato per AWS Lake Formation, segui i passaggi descritti nelle seguenti procedure:
Come creare un ruolo IAM per Amazon Redshift
-
Aprire la console IAM
. -
Nel pannello di navigazione, selezionare Ruoli.
-
Selezionare Create role (Crea ruolo).
-
Scegliere Servizio AWS come entità attendibile, quindi scegliere Redshift come caso d'uso.
-
In Caso d'uso per altro Servizi AWS, scegli Redshift - Personalizzabile, quindi scegli Avanti.
-
Verrà visualizzata la pagina Allega la policy di autorizzazione. Scegli
AmazonS3ReadOnlyAccess
eAWSGlueConsoleFullAccess
, se utilizzi il AWS Glue Data Catalog. Oppure scegliereAmazonAthenaFullAccess
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 al bucket di dati di AWS esempio, crea una nuova politica e aggiungi le seguenti autorizzazioni.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::redshift-downloads/*" } ] }
-
Per Role name (Nome ruolo), digitare un nome per il ruolo, ad esempio
myspectrum_role
. -
Esaminare le informazioni, quindi scegliere Create role (Crea ruolo).
-
Nel riquadro di navigazione, seleziona Ruoli. Scegliere il nome del nuovo ruolo per visualizzare il riepilogo, quindi copiare il ruolo ARN visualizzato nel campo Role ARN (ARN ruolo). Questo valore è l'Amazon Resource Name (ARN) per il ruolo appena creato. Viene utilizzato quando si creano tabelle esterne per fare riferimento ai file di dati in Amazon S3.
Per creare un ruolo IAM per Amazon Redshift utilizzando un AWS Glue Data Catalog enabled for AWS Lake Formation
-
Aprire la console IAM all'indirizzo https://console.aws.amazon.com/iam/
. -
Nel pannello di navigazione, selezionare Policy.
Se è la prima volta che selezioni Policy, verrà visualizzata la pagina Benvenuto nelle policy gestite. Seleziona Inizia.
-
Scegli Create Policy (Crea policy).
-
Scegliere di creare la policy nella scheda JSON.
-
Incollare nel documento di policy JSON seguente, che concede l'accesso al catalogo di dati ma nega le autorizzazioni di amministratore per Lake Formation.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftPolicyForLF", "Effect": "Allow", "Action": [ "glue:*", "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
-
Una volta terminato, selezionare Review (Rivedi) per rivedere la policy. In Validatore di policy vengono segnalati eventuali errori di sintassi.
-
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 agli utenti, gruppi o ruoli:
-
Utenti e gruppi in AWS IAM Identity Center:
Crea un set di autorizzazioni. Segui le istruzioni riportate nella pagina Create a permission set (Creazione di un set di autorizzazioni) nella Guida per l'utente di AWS IAM Identity Center .
-
Utenti gestiti in IAM tramite un provider di identità:
Crea un ruolo per la federazione delle identità. Segui le istruzioni riportate nella pagina Create a role for a third-party identity provider (federation) della Guida per l'utente IAM.
-
Utenti IAM:
-
Crea un ruolo che l'utente possa assumere. Segui le istruzioni riportate nella pagina Create a role for an IAM user della Guida per l'utente IAM.
-
(Non consigliato) Collega una policy direttamente a un utente o aggiungi un utente a un gruppo di utenti. Segui le istruzioni riportate nella pagina Aggiunta di autorizzazioni a un utente (console) nella Guida per l'utente IAM.
-
Come concedere le autorizzazioni SELECT nella tabella per eseguire le query del database Lake Formation
-
Apri la console Lake Formation all'indirizzo https://console.aws.amazon.com/lakeformation/
. -
Nel menu di navigazione scegli Autorizzazioni data lake, quindi seleziona Concedi.
-
Segui le istruzioni presenti in Granting table permissions using the named resource method nella Guida per gli sviluppatori di AWS Lake Formation . Inserisci le informazioni che seguono:
-
In Ruolo IAM, selezionare il ruolo IAM creato,
myspectrum_role
. Quando si esegue l'editori di query di Amazon Redshift, utilizzare il ruolo IAM per le autorizzazioni ai dati.Nota
Per concedere l'autorizzazione SELECT nella tabella in un catalogo di dati abilitato per Lake Formation eseguire la query, procedere 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.
-
-
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 l'accesso agli oggetti Amazon S3 è stato effettuato prima della configurazione di Lake Formation, rimuovere qualsiasi autorizzazione di policy IAM o bucket configurata in precedenza. Per ulteriori informazioni, consulta Upgrading AWS Glue Data Permissions to the AWS Lake Formation Model e Lake Formation Permissions.
Fase 2: associazione del ruolo IAM al cluster
Ora si dispone di un ruolo IAM che autorizza Amazon Redshift ad accedere al catalogo dati esterno e ad Amazon S3 per tuo conto. A questo punto è necessario associare tale ruolo al proprio cluster Amazon Redshift.
Associare un ruolo IAM a un cluster
-
Accedi a AWS Management Console e apri la console Amazon Redshift all'indirizzo. https://console.aws.amazon.com/redshiftv2/
-
Dal menu di navigazione scegliere Clusters (Cluster), quindi scegliere il cluster da aggiornare.
-
In Actions (Operazioni), scegliere Manage IAM roles (Gestisci ruoli IAM). Viene visualizzata la pagina IAM roles (Ruoli IAM).
-
Scegliere Inserisci ARN e quindi inserire un ARN o un ruolo IAM, oppure scegliere un ruolo IAM dall'elenco. Quindi scegliere Add IAM role (Aggiungi ruolo IAM) per aggiungerlo all'elenco degli Attached IAM roles (Ruoli IAM collegati).
-
Scegliere Done (Fatto) per associare il ruolo IAM 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 l'ARN del ruolo IAM che autorizza il tuo cluster ad accedere ad Amazon S3 per tuo conto. Puoi creare un database esterno in un Amazon Athena Data Catalog o in un metastore Apache Hive AWS Glue Data Catalog, 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
-
Per creare uno schema esterno, sostituire l'ARN del ruolo IAM nel comando seguente con l'ARN del ruolo creato nella fase 1. Quindi eseguire il comando nel proprio client SQL.
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;
-
Per creare una tabella esterna, eseguire il comando CREATE EXTERNAL TABLE seguente.
Nota
Il cluster e il bucket Amazon S3 devono trovarsi nella stessa Regione AWS. Per questo esempio del comando CREATE EXTERNAL TABLE, il bucket Amazon S3 con i dati di esempio si trova negli Stati Uniti orientali (Virginia settentrionale). Regione AWS Per visualizzare i dati di origine, scarica il file
sales_ts.000
. . È 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 di 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 --recursiveL'output del comando Amazon S3 copy conferma che il file è stato copiato
bucket-name
nel file desiderato. Regione AWScopy: s3://redshift-downloads/tickit/spectrum/sales/sales_ts.000 to s3://
bucket-name
/tickit/spectrum/sales/sales_ts.000create 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, è possibile eseguire query utilizzando le stesse istruzioni SELECT utilizzate per eseguire query su altre tabelle Amazon Redshift. Queste query con istruzioni SELECT includono il join di tabelle, l'aggregazione di dati e il filtraggio di predicati.
Come eseguire query sui dati in Amazon S3
-
Ottenere Il numero di righe nella tabella MYSPECTRUM_SCHEMA.SALES.
select count(*) from myspectrum_schema.sales;
count ------ 172462
-
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. Altrimenti, creare la tabella EVENT 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);
-
Caricare la tabella EVENT sostituendo l'ARN del ruolo IAM nel seguente comando COPY con l'ARN del ruolo creato in Fase 1: Creazione di un ruolo IAM per Amazon Redshift. Facoltativamente, puoi scaricare e visualizzare i dati di origine
allevents_pipe.txt
da un bucket Amazon S3. 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 mediante join la tabella esterna Amazon S3 MYSPECTRUM_SCHEMA.SALES alla tabella Amazon Redshift 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 delle query per la query precedente. Tenere presente le fasi
S3 Seq Scan
,S3 HashAggregate
eS3 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)
Avvia lo AWS CloudFormation stack e quindi interroga i dati in Amazon S3
Dopo aver creato un cluster Amazon Redshift e esserti connesso al cluster, puoi installare il DataLake AWS CloudFormation modello Redshift Spectrum e quindi interrogare 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 RedshiftUno schema esterno denominato
myspectrum_schema
Una tabella esterna denominata
sales
in un bucket Amazon S3Una tabella Redshift denominata
event
caricata con dati
Per avviare lo stack Redshift Spectrum Getting Started DataLake CloudFormation
Scegliere Avvio dello stack CFN
. La CloudFormation console si apre con il template DataLake .yml selezionato. Puoi anche scaricare e personalizzare il modello DataLake CloudFormation CFN
Redshift Spectrum Getting Started, quindi aprire la CloudFormation console (https://console.aws.amazon.com/cloudformation ) e creare uno stack con il modello personalizzato. Scegli Next (Successivo).
In Parametri, inserisci il nome del cluster Amazon Redshift, il nome del database e il nome utente del database.
Scegli Next (Successivo).
Vengono visualizzate le opzioni della pila.
Scegliere Successivo per accettare le impostazioni predefinite.
Consulta le informazioni e nella sezione Capacità, quindi scegli Riconosco che potrebbe creare risorse IAM. AWS CloudFormation
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
Richiedere tabelle esterne utilizzando le stesse istruzioni SELECT utilizzate per eseguire query su altre tabelle Amazon Redshift. Queste query con istruzioni SELECT includono il join di tabelle, l'aggregazione di dati e il filtraggio di 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)