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 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 di copia di Amazon S3 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 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: Crea un IAM ruolo 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 fornire tale autorizzazione, fai riferimento a un ruolo AWS Identity and Access Management (IAM) collegato al tuo 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 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 il AWS Glue Data Catalog con Redshift Spectrum, potrebbe essere necessario modificare le IAM policy. 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. Creare un IAM ruolo 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:
Creare un IAM ruolo per Amazon Redshift
-
Apri la IAMconsole
. -
Nel pannello di navigazione, seleziona Roles (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. 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 enabled for AWS Lake Formation
-
Apri la IAM console 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).
-
Scegli di creare la politica nella JSONscheda.
-
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": "*" } ] }
-
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 ai tuoi 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 IAM tramite un provider di identità:
Crea un ruolo per la federazione delle identità. Segui le istruzioni riportate in Creazione di un ruolo per un provider di identità di terze parti (federazione) nella Guida per l'IAMutente.
-
IAMutenti:
-
Crea un ruolo che l'utente possa assumere. Segui le istruzioni riportate nella sezione Creazione di un ruolo per un IAM utente nella Guida per l'IAMutente.
-
(Non consigliato) Collega una policy direttamente a un utente o aggiungi un utente a un gruppo di utenti. Segui le istruzioni riportate in Aggiungere autorizzazioni a un utente (console) nella Guida per l'IAMutente.
-
Per concedere SELECT le autorizzazioni sulla tabella per eseguire interrogazioni nel 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:
-
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.
-
-
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 Data Permissions to the AWS Lake Formation Model e Lake Formation Permissions.
Fase 2: Associa il ruolo al tuo cluster IAM
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
-
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.
-
Per Azioni, scegli Gestisci IAM ruoli. Viene visualizzata la pagina IAMdei ruoli.
-
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.
-
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 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, sostituisci il IAM ruolo ARN nel comando seguente con il ruolo ARN creato nel passaggio 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;
-
Per creare una tabella esterna, esegui il CREATE EXTERNAL TABLE comando seguente.
Nota
Il cluster e il bucket Amazon S3 devono trovarsi nella stessa 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 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 nel
bucket-name
nel formato 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, 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
-
Ottieni il numero di righe nel file _. MYSPECTRUM SCHEMA SALEStavolo.
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. 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);
-
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
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 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
-
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
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. 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.
Controlla le informazioni e nella sezione Capacità, quindi scegli Riconosco che potrebbe creare risorse. AWS CloudFormation IAM
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)