

AWS Data Pipeline non è più disponibile per i nuovi clienti. I clienti esistenti di AWS Data Pipeline possono continuare a utilizzare il servizio normalmente. [Ulteriori informazioni](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

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

# Copia i dati su Amazon Redshift utilizzando la riga di comando
<a name="dp-copydata-redshift-cli"></a>

Questo tutorial dimostra come copiare dati da Amazon S3 ad Amazon Redshift. Creerai una nuova tabella in Amazon Redshift e la utilizzerai AWS Data Pipeline per trasferire i dati su questa tabella da un bucket Amazon S3 pubblico, che contiene dati di input di esempio in formato CSV. I log vengono salvati in un bucket Amazon S3 di tua proprietà.

Amazon S3 è un servizio Web che consente di archiviare dati nel cloud. Per ulteriori informazioni, consultare la [Guida per l'utente di Amazon Simple archiviazione Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/). Amazon Redshift è un servizio di data warehouse nel cloud. Per ulteriori informazioni, consulta la [Amazon Redshift Management](https://docs.aws.amazon.com/redshift/latest/mgmt/) Guide.

**Prerequisiti**

Prima di iniziare , devi completare le fasi seguenti:

1. Installa e configura un'interfaccia a riga di comando (CLI). Per ulteriori informazioni, consulta [Accedere AWS Data Pipeline](what-is-datapipeline.md#accessing-datapipeline).

1. Assicurati che i ruoli IAM siano denominati **DataPipelineDefaultRole**ed **DataPipelineDefaultResourceRole**esistano. La AWS Data Pipeline console crea questi ruoli automaticamente. Se non hai utilizzato la AWS Data Pipeline console almeno una volta, devi creare questi ruoli manualmente. Per ulteriori informazioni, consulta [Ruoli IAM per AWS Data Pipeline](dp-iam-roles.md).

1. Imposta il `COPY` comando in Amazon Redshift, poiché avrai bisogno che queste stesse opzioni funzionino quando esegui la copia all'interno. AWS Data Pipeline Per informazioni, consulta [Prima di iniziare: configura le opzioni COPY e di caricamento dati](dp-learn-copy-redshift.md).

1. Configura un database Amazon Redshift. Per ulteriori informazioni, consulta [Configura Pipeline, crea un gruppo di sicurezza e crea un cluster Amazon Redshift](dp-copydata-redshift-prereq.md).

**Topics**
+ [Definire una pipeline in formato JSON](dp-copydata-redshift-define-pipeline-cli.md)
+ [Caricamento e attivazione della definizione della pipeline](dp-copydata-redshift-upload-cli.md)

# Definire una pipeline in formato JSON
<a name="dp-copydata-redshift-define-pipeline-cli"></a>

Questo scenario di esempio mostra come copiare i dati da un bucket Amazon S3 ad Amazon Redshift.

Questo è il file JSON completo di definizione della pipeline seguito da una spiegazione per ciascuna delle sue sezioni. È consigliabile utilizzare un editor di testo che può aiutare a verificare la sintassi di file in formato JSON e nominare il file utilizzando l'estensione del file `.json`.

```
{
  "objects": [
    {
      "id": "CSVId1",
      "name": "DefaultCSV1",
      "type": "CSV"
    },
    {
      "id": "RedshiftDatabaseId1",
      "databaseName": "dbname",
      "username": "user",
      "name": "DefaultRedshiftDatabase1",
      "*password": "password",
      "type": "RedshiftDatabase",
      "clusterId": "redshiftclusterId"
    },
    {
      "id": "Default",
      "scheduleType": "timeseries",
      "failureAndRerunMode": "CASCADE",
      "name": "Default",
      "role": "DataPipelineDefaultRole",
      "resourceRole": "DataPipelineDefaultResourceRole"
    },
    {
      "id": "RedshiftDataNodeId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "tableName": "orders",
      "name": "DefaultRedshiftDataNode1",
      "createTableSql": "create table StructuredLogs (requestBeginTime CHAR(30) PRIMARY KEY DISTKEY SORTKEY, requestEndTime CHAR(30), hostname CHAR(100), requestDate varchar(20));",
      "type": "RedshiftDataNode",
      "database": {
        "ref": "RedshiftDatabaseId1"
      }
    },
    {
      "id": "Ec2ResourceId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "securityGroups": "MySecurityGroup",
      "name": "DefaultEc2Resource1",
      "role": "DataPipelineDefaultRole",
      "logUri": "s3://myLogs",
      "resourceRole": "DataPipelineDefaultResourceRole",
      "type": "Ec2Resource"
    },
    {
      "id": "ScheduleId1",
      "startDateTime": "yyyy-mm-ddT00:00:00",
      "name": "DefaultSchedule1",
      "type": "Schedule",
      "period": "period",
      "endDateTime": "yyyy-mm-ddT00:00:00"
    },
    {
      "id": "S3DataNodeId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "filePath": "s3://datapipeline-us-east-1/samples/hive-ads-samples.csv",
      "name": "DefaultS3DataNode1",
      "dataFormat": {
        "ref": "CSVId1"
      },
      "type": "S3DataNode"
    },
    {
      "id": "RedshiftCopyActivityId1",
      "input": {
        "ref": "S3DataNodeId1"
      },
      "schedule": {
        "ref": "ScheduleId1"
      },
      "insertMode": "KEEP_EXISTING",
      "name": "DefaultRedshiftCopyActivity1",
      "runsOn": {
        "ref": "Ec2ResourceId1"
      },
      "type": "RedshiftCopyActivity",
      "output": {
        "ref": "RedshiftDataNodeId1"
      }
    }
  ]
}
```

Per ulteriori informazioni su questi oggetti, consulta la seguente documentazione.

**Topics**
+ [Nodi di dati](dp-copydata-redshift-node-cli.md)
+ [Risorsa](dp-copydata-redshift-resource-cli.md)
+ [Attività](dp-copydata-redshift-activity-cli.md)

# Nodi di dati
<a name="dp-copydata-redshift-node-cli"></a>

Questo esempio utilizza un nodo di dati di input, un nodo di dati di output e un database.

**Nodo di dati di input**  
Il componente della `S3DataNode` pipeline di input definisce la posizione dei dati di input in Amazon S3 e il formato dei dati di input. Per ulteriori informazioni, consulta [S3 DataNode](dp-object-s3datanode.md).

Questo componente di input è definito dai campi seguenti:

```
{
  "id": "S3DataNodeId1",
  "schedule": {
    "ref": "ScheduleId1"
  },
  "filePath": "s3://datapipeline-us-east-1/samples/hive-ads-samples.csv",
  "name": "DefaultS3DataNode1",
  "dataFormat": {
    "ref": "CSVId1"
  },
  "type": "S3DataNode"
},
```

`id`  
L'ID definito dall'utente, un'etichetta solo di riferimento.

`schedule`  
Un riferimento al componente di pianificazione.

`filePath`  
Il percorso ai dati associati al nodo di dati, cioè il file di input CSV in questo esempio.

`name`  
Il nome definito dall'utente, un'etichetta solo di riferimento.

`dataFormat`  
Un riferimento al formato dei dati dell'attività da elaborare.

**Nodo dei dati di output**  
Il componente della `RedshiftDataNode` pipeline di output definisce una posizione per i dati di output; in questo caso, una tabella in un database Amazon Redshift. Per ulteriori informazioni, consulta [RedshiftDataNode](dp-object-redshiftdatanode.md). Questo componente di output è definito dai campi seguenti: 

```
{
  "id": "RedshiftDataNodeId1",
  "schedule": {
    "ref": "ScheduleId1"
  },
  "tableName": "orders",
  "name": "DefaultRedshiftDataNode1",
  "createTableSql": "create table StructuredLogs (requestBeginTime CHAR(30) PRIMARY KEY DISTKEY SORTKEY, requestEndTime CHAR(30), hostname CHAR(100), requestDate varchar(20));",
  "type": "RedshiftDataNode",
  "database": {
    "ref": "RedshiftDatabaseId1"
  }
},
```

`id`  
L'ID definito dall'utente, un'etichetta solo di riferimento.

`schedule`  
Un riferimento al componente di pianificazione.

`tableName`  
Nome della tabella Amazon Redshift.

`name`  
Il nome definito dall'utente, un'etichetta solo di riferimento.

`createTableSql`  
Un'espressione SQL per creare la tabella nel database.

`database`  
Un riferimento al database Amazon Redshift.

**Database**  
Questo componente `RedshiftDatabase` è definito dai campi seguenti. Per ulteriori informazioni, consulta [RedshiftDatabase](dp-object-redshiftdatabase.md).

```
{
  "id": "RedshiftDatabaseId1",
  "databaseName": "dbname",
  "username": "user",
  "name": "DefaultRedshiftDatabase1",
  "*password": "password",
  "type": "RedshiftDatabase",
  "clusterId": "redshiftclusterId"
},
```

`id`  
L'ID definito dall'utente, un'etichetta solo di riferimento.

`databaseName`  
Il nome del database logico.

`username`  
Il nome utente da fornire durante la connessione al database.

`name`  
Il nome definito dall'utente, un'etichetta solo di riferimento.

`password`  
La password per la connessione al database.

`clusterId`  
L'ID del cluster Redshift. 

# Risorsa
<a name="dp-copydata-redshift-resource-cli"></a>

Questa è una definizione della risorsa di calcolo che esegue l'operazione di copia. In questo esempio, AWS Data Pipeline dovrebbe creare automaticamente un'istanza EC2 per eseguire l'attività di copia e terminare l'istanza al termine dell'attività. I campi definiti qui controllano la creazione e la funzione dell'istanza che esegue il lavoro. Per ulteriori informazioni, consulta [Ec2Resource](dp-object-ec2resource.md).

Questo componente `Ec2Resource` è definito dai campi seguenti:

```
{
  "id": "Ec2ResourceId1",
  "schedule": {
    "ref": "ScheduleId1"
  },
  "securityGroups": "MySecurityGroup",
  "name": "DefaultEc2Resource1",
  "role": "DataPipelineDefaultRole",
  "logUri": "s3://myLogs",
  "resourceRole": "DataPipelineDefaultResourceRole",
  "type": "Ec2Resource"
},
```

`id`  
L'ID definito dall'utente, un'etichetta solo di riferimento.

`schedule`  
La pianificazione su cui creare questa risorsa di calcolo.

`securityGroups`  
Il gruppo di sicurezza da utilizzare per le istanze nel pool di risorse.

`name`  
Il nome definito dall'utente, un'etichetta solo di riferimento.

`role`  
Il ruolo IAM dell'account che accede alle risorse, ad esempio l'accesso a un bucket Amazon S3 per recuperare i dati.

`logUri`  
Il percorso di destinazione di Amazon S3 per il backup dei log di Task Runner da. `Ec2Resource`

`resourceRole`  
Il ruolo IAM dell'account che crea le risorse, ad esempio la creazione e la configurazione di un'istanza EC2 a tuo nome. Ruolo e ResourceRole 3 possono essere lo stesso ruolo, ma forniscono separatamente una maggiore granularità nella configurazione di sicurezza.

# Attività
<a name="dp-copydata-redshift-activity-cli"></a>

L'ultima sezione del file JSON è la definizione dell'attività che rappresenta il lavoro da eseguire. In questo caso, utilizziamo un `RedshiftCopyActivity` componente per copiare i dati da Amazon S3 ad Amazon Redshift. Per ulteriori informazioni, consulta [RedshiftCopyActivity](dp-object-redshiftcopyactivity.md).

Questo componente `RedshiftCopyActivity` è definito dai campi seguenti:

```
{
  "id": "RedshiftCopyActivityId1",
  "input": {
    "ref": "S3DataNodeId1"
  },
  "schedule": {
    "ref": "ScheduleId1"
  },
  "insertMode": "KEEP_EXISTING",
  "name": "DefaultRedshiftCopyActivity1",
  "runsOn": {
    "ref": "Ec2ResourceId1"
  },
  "type": "RedshiftCopyActivity",
  "output": {
    "ref": "RedshiftDataNodeId1"
  }
},
```

`id`  
L'ID definito dall'utente, un'etichetta solo di riferimento.

`input`  
Un riferimento al file sorgente di Amazon S3.

`schedule`  
La pianificazione su cui eseguire questa attività.

`insertMode`  
Il tipo di inserimento (`KEEP_EXISTING`, `OVERWRITE_EXISTING` o `TRUNCATE`).

`name`  
Il nome definito dall'utente, un'etichetta solo di riferimento.

`runsOn`  
La risorsa di calcolo che esegue il lavoro definito dall'attività.

`output`  
Un riferimento alla tabella di destinazione di Amazon Redshift.

# Caricamento e attivazione della definizione della pipeline
<a name="dp-copydata-redshift-upload-cli"></a>

Devi caricare la definizione della pipeline e attivarla. Nei seguenti comandi di esempio, sostituiteli *pipeline\$1name* con un'etichetta per la pipeline e *pipeline\$1file* con il percorso completo per il file di definizione della pipeline. `.json`

**AWS CLI**

[Per creare la definizione della pipeline e attivare la pipeline, utilizzate il seguente comando create-pipeline.](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/create-pipeline.html) Annota l'ID della pipeline, poiché utilizzerai questo valore con la maggior parte dei comandi CLI.

```
aws datapipeline create-pipeline --name pipeline_name --unique-id token
{
    "pipelineId": "df-00627471SOVYZEXAMPLE"
}
```

Per caricare la definizione della pipeline, utilizzate il seguente comando. [put-pipeline-definition](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/put-pipeline-definition.html)

```
aws datapipeline put-pipeline-definition --pipeline-id df-00627471SOVYZEXAMPLE --pipeline-definition file://MyEmrPipelineDefinition.json
```

Se la pipeline viene convalidata correttamente, il `validationErrors` campo è vuoto. È necessario esaminare eventuali avvertenze.

Per attivare la pipeline, usa il seguente comando [activate-pipeline](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/activate-pipeline.html).

```
aws datapipeline activate-pipeline --pipeline-id df-00627471SOVYZEXAMPLE
```

[È possibile verificare che la pipeline venga visualizzata nell'elenco delle pipeline utilizzando il seguente comando list-pipelines.](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/list-pipelines.html)

```
aws datapipeline list-pipelines
```