

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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
<a name="c-getting-started-using-spectrum"></a>

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](https://aws.amazon.com/redshift/pricing/#redshift-spectrum-pricing).

## Prerequisiti
<a name="c-getting-started-using-spectrum-prerequisites"></a>

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 sulla creazione di un cluster Amazon Redshift, consulta la pagina [Nozioni di base sui data warehouse con provisioning Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/new-user.html) nella *Guida alle operazioni di base di Amazon Redshift*. Per informazioni sulle modalità di connessione a un cluster, consulta [Connessione ai data warehouse Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/database-tasks.html) nella *Guida alle operazioni di base di Amazon Redshift*.

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
<a name="c-getting-started-using-spectrum-cfn"></a>

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](#c-getting-started-using-spectrum-query-s3-data-cfn).

## Nozioni di base su Redshift Spectrum graduale
<a name="c-getting-started-using-spectrum-steps"></a>

Per iniziare a utilizzare Amazon Redshift Spectrum, completare la seguente procedura:
+ [Passaggio 1. Creazione di un ruolo IAM per Amazon Redshift](#c-getting-started-using-spectrum-create-role) 
+ [Fase 2: associazione del ruolo IAM al cluster](#c-getting-started-using-spectrum-add-role) 
+ [Fase 3: creazione di uno schema esterno e di una tabella esterna](#c-getting-started-using-spectrum-create-external-table) 
+ [Fase 4: Esecuzione di query sui dati in Amazon S3](#c-getting-started-using-spectrum-query-s3-data) 

## Passaggio 1. Creazione di un ruolo IAM per Amazon Redshift
<a name="c-getting-started-using-spectrum-create-role"></a>

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](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html).

**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](https://docs.aws.amazon.com/athena/latest/ug/glue-athena.html#glue-upgrade) 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](#spectrum-get-started-create-role) 
+ Se utilizzi Redshift Spectrum con un AWS Glue Data Catalog programma abilitato per AWS Lake Formation, segui i passaggi descritti nelle seguenti procedure:
  +  [Per creare un ruolo IAM per Amazon Redshift utilizzando un AWS Glue Data Catalog enabled for AWS Lake Formation](#spectrum-get-started-create-role-lake-formation) 
  +  [Come concedere le autorizzazioni SELECT nella tabella per eseguire le query del database Lake Formation](#spectrum-get-started-grant-lake-formation-table) <a name="spectrum-get-started-create-role"></a>

**Come creare un ruolo IAM per Amazon Redshift**

1. Aprire la [console IAM](https://console.aws.amazon.com/iam/home?#home).

1. Nel pannello di navigazione, selezionare **Ruoli**.

1. Selezionare **Create role (Crea ruolo)**.

1. Scegliere **Servizio AWS ** come entità attendibile, quindi scegliere **Redshift** come caso d'uso.

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

1. Verrà visualizzata la pagina **Allega la policy di autorizzazione**. Scegli `AmazonS3ReadOnlyAccess` e`AWSGlueConsoleFullAccess`, se utilizzi il AWS Glue Data Catalog. 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 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/*"
           }
       ]
   }
   ```

1. Per **Role name (Nome ruolo)**, digitare un nome per il ruolo, ad esempio **myspectrum\$1role**.

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

1. 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.<a name="spectrum-get-started-create-role-lake-formation"></a>

**Per creare un ruolo IAM per Amazon Redshift utilizzando un AWS Glue Data Catalog enabled for AWS Lake Formation**

1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Nel pannello di navigazione, selezionare **Policy**.

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

1. Scegli **Crea policy**. 

1. Scegliere di creare la policy nella scheda **JSON**. 

1. Incollare nel documento di policy JSON seguente, che concede l'accesso al catalogo di dati ma nega le autorizzazioni di amministratore per Lake Formation.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "RedshiftPolicyForLF",
               "Effect": "Allow",
               "Action": [
                   "glue:*",
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Una volta terminato, selezionare **Review (Rivedi)** per rivedere la policy. In Validatore di policy vengono segnalati eventuali errori di sintassi.

1. Nella pagina **Review policy (Rivedi policy)**, in **Name (Nome)** inserire **myspectrum\$1policy** per denominare la policy in fase di creazione. (Opzionale) Immettere una **Description (descrizione)**. Consulta il **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](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) (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)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) 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](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) 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)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) nella *Guida per l’utente IAM*.<a name="spectrum-get-started-grant-lake-formation-table"></a>

**Come concedere le autorizzazioni SELECT nella tabella per eseguire le query del database Lake Formation**

1. Apri la console Lake Formation all'indirizzo [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

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

1. Segui le istruzioni presenti in [Granting table permissions using the named resource method](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-table-permissions.html) 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. 

1. Scegliere **Concedi**.

**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](https://docs.aws.amazon.com/lake-formation/latest/dg/upgrade-glue-lake-formation.html) e [Lake](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html) Formation Permissions. 

## Fase 2: associazione del ruolo IAM al cluster
<a name="c-getting-started-using-spectrum-add-role"></a>

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**

1. Accedi a Console di gestione AWS e apri la console Amazon Redshift all'indirizzo. [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)

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

1. In **Actions (Operazioni)**, scegliere **Manage IAM roles (Gestisci ruoli IAM)**. Viene visualizzata la pagina **IAM roles (Ruoli IAM)**. 

1. 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)**. 

1. 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
<a name="c-getting-started-using-spectrum-create-external-table"></a>

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](c-spectrum-external-schemas.md). <a name="spectrum-get-started-create-external-table"></a>

**Per creare uno schema esterno e una tabella esterna**

1. Per creare uno schema esterno, sostituire l'ARN del ruolo IAM nel comando seguente con l'ARN del ruolo creato nella [fase 1](#c-getting-started-using-spectrum-create-role). 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;
   ```

1. 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`](https://s3.amazonaws.com/redshift-downloads/tickit/spectrum/sales/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 --recursive
   ```
L'output del comando Amazon S3 copy conferma che il file è stato copiato *bucket-name* nel file 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
<a name="c-getting-started-using-spectrum-query-s3-data"></a>

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. <a name="spectrum-get-started-query-s3-data"></a>

**Come eseguire query sui dati in Amazon S3**

1. Ottenere Il numero di righe nella tabella MYSPECTRUM\$1SCHEMA.SALES. 

   ```
   select count(*) from myspectrum_schema.sales;
   ```

   ```
   count 
   ------
   172462
   ```

1. 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 [Carica dati](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html), nel database è disponibile una tabella denominata EVENT. 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);
   ```

1. Caricare la tabella EVENT sostituendo l'ARN del ruolo IAM nel seguente comando COPY con l'ARN del ruolo creato in [Passaggio 1. Creazione di un ruolo IAM per Amazon Redshift](#c-getting-started-using-spectrum-create-role). Facoltativamente, puoi scaricare e visualizzare i [dati di origine `allevents_pipe.txt`](https://s3.amazonaws.com/redshift-downloads/tickit/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\$1SCHEMA.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
   ```

1. 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)
   ```

## Avvia lo AWS CloudFormation stack e quindi interroga i dati in Amazon S3
<a name="c-getting-started-using-spectrum-query-s3-data-cfn"></a>

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 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. Scegliere [https://console.aws.amazon.com/cloudformation/home?#/stacks/new?stackName=DataLake&templateURL=https://s3.amazonaws.com/redshift-downloads/docs-downloads/DataLake.yml](https://console.aws.amazon.com/cloudformation/home?#/stacks/new?stackName=DataLake&templateURL=https://s3.amazonaws.com/redshift-downloads/docs-downloads/DataLake.yml). La CloudFormation console si apre con il template DataLake .yml selezionato.

   Puoi anche scaricare e personalizzare il [modello DataLake CloudFormation CFN](https://s3.amazonaws.com/redshift-downloads/docs-downloads/DataLake.yml) Redshift Spectrum Getting Started, quindi aprire la CloudFormation console ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) e creare uno stack con il modello personalizzato. 

1. Scegli **Next (Successivo)**.

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

1. Scegli **Next (Successivo)**.

   Vengono visualizzate le opzioni della pila.

1. Scegliere **Successivo** per accettare le impostazioni predefinite.

1. Consulta le informazioni e nella sezione **Capacità**, quindi scegli **Riconosco che AWS CloudFormation potrebbe creare risorse IAM**.

1. 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.

### Eseguire query sui dati in Amazon S3
<a name="c-getting-started-spectrum-cfn-query-s3-data"></a>

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 esterna`myspectrum_schema.sales`. 

```
select count(*) from myspectrum_schema.sales;
```

```
count 
------
172462
```

### Effettuare il join di una tabella esterna con una tabella locale
<a name="c-getting-started-spectrum-cfn-table-join"></a>

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
```

### Visualizzare il piano di query
<a name="c-getting-started-spectrum-cfn-query-plan"></a>

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)
```