Spostare i dati da Amazon Redshift usando Azure Data FactoryMove data From Amazon Redshift using Azure Data Factory

Nota

Le informazioni di questo articolo sono valide per la versione 1 di Data Factory.This article applies to version 1 of Data Factory. Se si usa la versione corrente del servizio Data Factory, vedere le informazioni sul connettore Amazon Redshift nella versione 2.If you are using the current version of the Data Factory service, see Amazon Redshift connector in V2.

Questo articolo illustra come usare l'attività di copia in Azure Data Factory per spostare i dati da Amazon Redshift.This article explains how to use the Copy Activity in Azure Data Factory to move data from Amazon Redshift. Si basa sull'articolo relativo alle attività di spostamento dei dati, che offre una panoramica generale dello spostamento dei dati con l'attività di copia.The article builds on the Data Movement Activities article, which presents a general overview of data movement with the copy activity.

Attualmente Data Factory supporta solo lo spostamento di dati da Amazon Redshift a un archivio dati sink consentito.Data Factory currently supports only moving data from Amazon Redshift to a supported sink data store. Lo spostamento di dati da altri archivi dati ad Amazon Redshift non è supportato.Moving data from other data stores to Amazon Redshift is not supported.

Suggerimento

Per ottenere prestazioni ottimali quando si copiano grandi quantità di dati da Amazon Redshift, provare a usare il comando UNLOAD predefinito di Redshift tramite Amazon Simple Storage Service (S3).To achieve the best performance when copying large amounts of data from Amazon Redshift, consider using the built-in Redshift UNLOAD command through Amazon Simple Storage Service (Amazon S3). Per informazioni dettagliate, vedere Usare UNLOAD per copiare dati da Amazon Redshift.For details, see Use UNLOAD to copy data from Amazon Redshift.

PrerequisitiPrerequisites

IntroduzioneGetting started

È possibile creare una pipeline con un'attività di copia per spostare dati da un'origine Amazon Redshift usando diversi strumenti e API.You can create a pipeline with a copy activity to move data from an Amazon Redshift source by using different tools and APIs.

Il modo più semplice per creare una pipeline è usare la Copia guidata di Azure Data Factory.The easiest way to create a pipeline is to use the Azure Data Factory Copy Wizard. Per una rapida procedura dettagliata di creazione di una pipeline mediante la copia guidata, vedere Esercitazione: Creare una pipeline usando la copia guidata.For a quick walkthrough on creating a pipeline by using the Copy Wizard, see the Tutorial: Create a pipeline by using the Copy Wizard.

È anche possibile creare una pipeline con Visual Studio, Azure PowerShell o altri strumenti.You can also create a pipeline by using Visual Studio, Azure PowerShell, or other tools. Per creare la pipeline, è possibile usare anche modelli di Azure Resource Manager, l'API .NET o l'API REST.Azure Resource Manager templates, the .NET API, or the REST API can also be used to create the pipeline. Per le istruzioni dettagliate sulla creazione di una pipeline con un'attività di copia, vedere l'esercitazione sull'attività di copia.For step-by-step instructions to create a pipeline with a copy activity, see the Copy Activity tutorial.

Se si usano gli strumenti o le API, eseguire la procedura seguente per creare una pipeline che sposta i dati da un archivio dati di origine a un archivio dati sink:Whether you use the tools or APIs, you perform the following steps to create a pipeline that moves data from a source data store to a sink data store:

  1. Creare i servizi collegati per collegare gli archivi dati di input e output alla data factory.Create linked services to link input and output data stores to your data factory.
  2. Creare i set di dati per rappresentare i dati di input e di output per le operazioni di copia.Create datasets to represent input and output data for the copy operation.
  3. Creare una pipeline con un'attività di copia che accetti un set di dati come input e un set di dati come output.Create a pipeline with a copy activity that takes a dataset as an input and a dataset as an output.

Quando si usa la Copia guidata, le definizioni JSON per queste entità di Data Factory vengono create automaticamente.When you use the Copy Wizard, JSON definitions for these Data Factory entities are automatically created. Quando si usano gli strumenti o le API, ad eccezione dell'API .NET, usare il formato JSON per definire le entità di Data Factory.When you use tools or APIs (except the .NET API), you define the Data Factory entities by using the JSON format. La sezione Esempio di JSON: Copiare i dati da Amazon Redshift alla risorsa di Archiviazione BLOB di Azure mostra le definizioni JSON per le entità di Data Factory usate per copiare i dati da un archivio dati Amazon Redshift.The JSON example: Copy data from Amazon Redshift to Azure Blob storage shows the JSON definitions for the Data Factory entities that are used to copy data from an Amazon Redshift data store.

Le sezioni seguenti descrivono le proprietà JSON che vengono usate per definire le entità di Data Factory per Amazon Redshift.The following sections describe the JSON properties that are used to define the Data Factory entities for Amazon Redshift.

Proprietà del servizio collegatoLinked service properties

La tabella seguente include le descrizioni degli elementi JSON specifici di un servizio collegato Amazon Redshift.The following table provides descriptions for the JSON elements that are specific to an Amazon Redshift linked service.

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
typetype Questa proprietà deve essere impostata su AmazonRedshift.This property must be set to AmazonRedshift. Yes
serverserver Indirizzo IP o nome host del server Amazon Redshift.The IP address or host name of the Amazon Redshift server. YesYes
portport Il numero della porta TCP che il server Amazon Redshift usa per ascoltare le connessioni client.The number of the TCP port that the Amazon Redshift server uses to listen for client connections. No (il valore predefinito è 5439)No (default is 5439)
databasedatabase Nome del database Amazon Redshift.The name of the Amazon Redshift database. YesYes
usernameusername Nome dell'utente che ha accesso al database.The name of the user who has access to the database. YesYes
passwordpassword La password per l'account utente.The password for the user account. Yes

Proprietà del set di datiDataset properties

Per un elenco delle sezioni e delle proprietà disponibili per la definizione dei set di dati, vedere l'articolo Set di dati in Azure Data Factory.For a list of the sections and properties that are available for defining datasets, see the Creating datasets article. Le sezioni structure, availability e policy sono simili per tutti i tipi di set di dati.The structure, availability, and policy sections are similar for all dataset types. Tra gli esempi di tipi di set di dati sono inclusi gli archivi di Azure SQL, gli archivi BLOB di Azure e gli archivi tabelle di Azure.Examples of dataset types include Azure SQL, Azure Blob storage, and Azure Table storage.

La sezione typeProperties è diversa per ogni tipo di set di dati e contiene informazioni sul percorso dei dati nell'archivio.The typeProperties section is different for each type of dataset and provides information about the location of the data in the store. La sezione typeProperties per un set di dati di tipo RelationalTable, che include il set di dati Amazon Redshift, ha le proprietà seguenti:The typeProperties section for a dataset of type RelationalTable, which includes the Amazon Redshift dataset, has the following properties:

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
tableNametableName Nome della tabella nel database Amazon Redshift a cui fa riferimento il servizio collegato.The name of the table in the Amazon Redshift database that the linked service refers to. No (se è specificata la proprietà query di un'attività di copia di tipo RelationalSource)No (if the query property of a copy activity of type RelationalSource is specified)

Proprietà dell'attività di copiaCopy Activity properties

Per un elenco delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere l'articolo Creating Pipelines (Creazione di pipeline).For a list of sections and properties that are available for defining activities, see the Creating Pipelines article. Le proprietà name, description, tabella inputs, tabella outputs e policy sono disponibili per tutti i tipi di attività.The name, description, inputs table, outputs table, and policy properties are available for all types of activities. Le proprietà disponibili nella sezione typeProperties variano per ogni tipo di attività.The properties that are available in the typeProperties section vary for each activity type. Per l'attività di copia, le proprietà variano in base ai tipi di origini dati e sink.For Copy Activity, the properties vary depending on the types of data sources and sinks.

Per l'attività di copia, quando l'origine è di tipo AmazonRedshiftSource, nella sezione typeProperties sono disponibili le proprietà seguenti:For Copy Activity, when the source is of type AmazonRedshiftSource, the following properties are available in typeProperties section:

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
queryquery Usare la query personalizzata per leggere i dati.Use the custom query to read the data. No (se è specificata la proprietà tableName di un set di dati)No (if the tableName property of a dataset is specified)
redshiftUnloadSettingsredshiftUnloadSettings Contiene il gruppo di proprietà quando si usa il comando UNLOAD di Redshift.Contains the property group when using the Redshift UNLOAD command. NoNo
s3LinkedServiceNames3LinkedServiceName Amazon S3 da usare come archivio provvisorio.The Amazon S3 to use as an interim store. Il servizio collegato viene specificato usando un nome di Azure Data Factory di tipo AwsAccessKey.The linked service is specified by using an Azure Data Factory name of type AwsAccessKey. Obbligatoria quando si usa la proprietà redshiftUnloadSettingsRequired when using the redshiftUnloadSettings property
bucketNamebucketName Indica il bucket Amazon S3 da usare per archiviare i dati provvisori.Indicates the Amazon S3 bucket to use to store the interim data. Se questa proprietà non è specificata, l'attività di copia genera automaticamente un bucket.If this property is not provided, Copy Activity auto-generates a bucket. Obbligatoria quando si usa la proprietà redshiftUnloadSettingsRequired when using the redshiftUnloadSettings property

In alternativa, è possibile usare il tipo RelationalSource, che include Amazon Redshift, con la proprietà seguente nella sezione typeProperties.Alternatively, you can use the RelationalSource type, which includes Amazon Redshift, with the following property in the typeProperties section. Si noti che questo tipo di origine non supporta il comando UNLOAD di Redshift.Note this source type doesn't support the Redshift UNLOAD command.

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
queryquery Usare la query personalizzata per leggere i dati.Use the custom query to read the data. No (se è specificata la proprietà tableName di un set di dati)No (if the tableName property of a dataset is specified)

Usare UNLOAD per copiare i dati da Amazon RedshiftUse UNLOAD to copy data from Amazon Redshift

Il comando UNLOAD di Amazon Redshift scarica i risultati di una query in uno o più file su Amazon S3.The Amazon Redshift UNLOAD command unloads the results of a query to one or more files on Amazon S3. Questo comando è consigliato da Amazon per la copia di set di dati di grandi dimensioni da Redshift.This command is recommended by Amazon for copying large datasets from Redshift.

Esempio: Copiare dati da Amazon Redshift ad Azure SQL Data WarehouseExample: Copy data from Amazon Redshift to Azure SQL Data Warehouse

Questo esempio copia i dati da Amazon Redshift ad Azure SQL Data Warehouse.This example copies data from Amazon Redshift to Azure SQL Data Warehouse. L'esempio usa il comando UNLOAD di Redshift, i dati della copia di staging e Microsoft PolyBase.The example uses the Redshift UNLOAD command, staged copy data, and Microsoft PolyBase.

Per questo caso d'uso di esempio, l'attività di copia scarica prima i dati da Amazon Redshift ad Amazon S3, in base alla configurazione dell'opzione redshiftUnloadSettings.For this sample use case, Copy Activity first unloads the data from Amazon Redshift to Amazon S3 as configured in the redshiftUnloadSettings option. I dati vengono quindi copiati da Amazon S3 all'archiviazione BLOB di Azure, come specificato nell'opzione stagingSettings.Next, the data is copied from Amazon S3 to Azure Blob storage as specified in the stagingSettings option. PolyBase carica infine i dati in SQL Data Warehouse.Finally, PolyBase loads the data into SQL Data Warehouse. Tutti i formati provvisori vengono gestiti dall'attività di copia.All of the interim formats are handled by Copy Activity.

Flusso di lavoro di copia da Amazon Redshift a SQL Data Warehouse

{
    "name": "CopyFromRedshiftToSQLDW",
    "type": "Copy",
    "typeProperties": {
        "source": {
            "type": "AmazonRedshiftSource",
            "query": "select * from MyTable",
            "redshiftUnloadSettings": {
                "s3LinkedServiceName":"MyAmazonS3StorageLinkedService",
                "bucketName": "bucketForUnload"
            }
        },
        "sink": {
            "type": "SqlDWSink",
            "allowPolyBase": true
        },
        "enableStaging": true,
        "stagingSettings": {
            "linkedServiceName": "MyAzureStorageLinkedService",
            "path": "adfstagingcopydata"
        },
        "cloudDataMovementUnits": 32
        .....
    }
}

Esempio di JSON: copiare i dati da Amazon Redshift alla risorsa di archiviazione BLOB di AzureJSON example: Copy data from Amazon Redshift to Azure Blob storage

Questo esempio illustra come copiare dati da un database Amazon Redshift in Archiviazione BLOB di Azure.This sample shows how to copy data from an Amazon Redshift database to Azure Blob Storage. I dati possono essere copiati direttamente in un sink supportato usando l'attività di copia.Data can be copied directly to any supported sink by using Copy Activity.

L'esempio include le entità di Data Factory seguenti:The sample has the following data factory entities:

L'esempio copia i dati dai risultati di una query in Amazon Redshift a un BLOB di Azure ogni ora.The sample copies data from a query result in Amazon Redshift to an Azure blob hourly. Le proprietà JSON utilizzate in questi esempi sono descritte nelle sezioni riportate dopo le definizioni di entità.The JSON properties that are used in the sample are described in the sections that follow the entity definitions.

Servizio collegato Amazon RedshiftAmazon Redshift linked service

{
    "name": "AmazonRedshiftLinkedService",
    "properties":
    {
        "type": "AmazonRedshift",
        "typeProperties":
        {
            "server": "< The IP address or host name of the Amazon Redshift server >",
            "port": "<The number of the TCP port that the Amazon Redshift server uses to listen for client connections.>",
            "database": "<The database name of the Amazon Redshift database>",
            "username": "<username>",
            "password": "<password>"
        }
    }
}

Servizio collegato di archiviazione BLOB di AzureAzure Blob storage linked service

{
  "name": "AzureStorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

Set di dati di input Redshift AmazonAmazon Redshift input dataset

La proprietà external viene impostata su "true" per comunicare al servizio Data Factory che il set di dati è esterno alla data factory.The external property is set to "true" to inform the Data Factory service that the dataset is external to the data factory. Questa impostazione della proprietà indica che il set di dati non viene generato da un'attività nella data factory.This property setting indicates that the dataset is not produced by an activity in the data factory. Impostare la proprietà su true in un set di dati di input non generato da un'attività nella pipeline.Set the property to true on an input dataset that is not produced by an activity in the pipeline.

{
    "name": "AmazonRedshiftInputDataset",
    "properties": {
        "type": "RelationalTable",
        "linkedServiceName": "AmazonRedshiftLinkedService",
        "typeProperties": {
            "tableName": "<Table name>"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true
    }
}

Set di dati di output del BLOB di AzureAzure Blob output dataset

I dati vengono scritti in un nuovo BLOB ogni ora impostando la proprietà frequency su "Hour" e interval su 1.Data is written to a new blob every hour by setting the frequency property to "Hour" and the interval property to 1. La proprietà folderPath del BLOB viene valutata in modo dinamico.The folderPath property for the blob is dynamically evaluated. Il valore della proprietà è basato sull'ora di inizio della sezione che viene elaborata.The property value is based on the start time of the slice that is being processed. Il percorso della cartella usa le parti anno, mese, giorno e ora dell'ora di inizio.The folder path uses the year, month, day, and hours parts of the start time.

{
    "name": "AzureBlobOutputDataSet",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/fromamazonredshift/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "\t"
            },
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                },
                {
                    "name": "Hour",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "HH"
                    }
                }
            ]
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Attività di copia in una pipeline con un'origine Amazon Redshift (di tipo RelationalSource) e un sink BLOB di AzureCopy activity in a pipeline with an Azure Redshift source (of type RelationalSource) and an Azure Blob sink

La pipeline contiene un'attività di copia configurata per usare i set di dati di input e di output.The pipeline contains a copy activity that is configured to use the input and output datasets. La pipeline è pianificata per essere eseguita ogni ora.The pipeline is scheduled to run every hour. Nella definizione JSON per la pipeline il tipo di origine è impostato su RelationalSource e il tipo di sink è impostato su BlobSink.In the JSON definition for the pipeline, the source type is set to RelationalSource and the sink type is set to BlobSink. La query SQL specificata per la proprietà query permette di selezionare i dati da copiare dall'ultima ora.The SQL query specified for the query property selects the data to copy from the past hour.

{
    "name": "CopyAmazonRedshiftToBlob",
    "properties": {
        "description": "pipeline for copy activity",
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "AmazonRedshiftSource",
                        "query": "$$Text.Format('select * from MyTable where timestamp >= \\'{0:yyyy-MM-ddTHH:mm:ss}\\' AND timestamp < \\'{1:yyyy-MM-ddTHH:mm:ss}\\'', WindowStart, WindowEnd)",
                        "redshiftUnloadSettings": {
                            "s3LinkedServiceName":"myS3Storage",
                            "bucketName": "bucketForUnload"
                        }
                    },
                    "sink": {
                        "type": "BlobSink",
                        "writeBatchSize": 0,
                        "writeBatchTimeout": "00:00:00"
                    },
                    "cloudDataMovementUnits": 32
                },
                "inputs": [
                    {
                        "name": "AmazonRedshiftInputDataset"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobOutputDataSet"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00",
                    "concurrency": 1
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "AmazonRedshiftToBlob"
            }
        ],
        "start": "2014-06-01T18:00:00Z",
        "end": "2014-06-01T19:00:00Z"
    }
}

Tipo di mappatura di Amazon RedshiftType mapping for Amazon Redshift

Come accennato nell'articolo sulle attività di spostamento dei dati, l'attività di copia esegue conversioni dei tipi automatiche dai tipi di origine ai tipi di sink.As mentioned in the data movement activities article, Copy Activity performs automatic type conversions from source type to sink type. I tipi vengono convertiti usando un approccio in due passaggi:The types are converted by using a two-step approach:

  1. Conversione dal tipo di origine nativo al tipo .NETConvert from a native source type to a .NET type
  2. Conversione dal tipo .NET al tipo di sink nativoConvert from a .NET type to a native sink type

Quando l'attività di copia converte i dati da un tipo Amazon Redshift a un tipo .NET, vengono usati i mapping seguenti:The following mappings are used when Copy Activity converts the data from an Amazon Redshift type to a .NET type:

Tipo Amazon RedshiftAmazon Redshift type Tipo .NET.NET type
SMALLINTSMALLINT Int16Int16
INTEGERINTEGER Int32Int32
BIGINTBIGINT Int64Int64
DECIMALDECIMAL DecimalDecimal
REALREAL SingleSingle
DOUBLE PRECISIONDOUBLE PRECISION DoubleDouble
BOOLEANBOOLEAN stringString
CHARCHAR StringString
VARCHARVARCHAR StringString
DATEDATE DateTimeDateTime
TIMESTAMPTIMESTAMP DateTimeDateTime
TEXTTEXT StringString

Eseguire il mapping delle colonne dell'origine alle colonne del sinkMap source to sink columns

Per informazioni su come eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati del sink, vedere Mapping delle colonne del set di dati in Azure Data Factory.To learn how to map columns in the source dataset to columns in the sink dataset, see Mapping dataset columns in Azure Data Factory.

Letture ripetibili da origini relazionaliRepeatable reads from relational sources

Quando si copiano dati da un archivio dati relazionale è necessario tenere presente la ripetibilità per evitare risultati imprevisti.When you copy data from a relational data store, keep repeatability in mind to avoid unintended outcomes. In Azure Data Factory è possibile rieseguire una sezione manualmente.In Azure Data Factory, you can rerun a slice manually. È anche possibile configurare la proprietà policy di ripetizione per un set di dati per poter rieseguire una sezione in caso di errore.You can also configure the retry policy for a dataset to rerun a slice when a failure occurs. Assicurarsi che vengano letti gli stessi dati, indipendentemente da quante volte viene eseguita la sezione.Make sure that the same data is read, no matter how many times the slice is rerun. Verificare anche che vengano letti gli stessi dati indipendentemente da come viene rieseguita la sezione.Also make sure that the same data is read regardless of how you rerun the slice. Per altre informazioni, vedere Letture ripetibili da origini relazionali.For more information, see Repeatable reads from relational sources.

Prestazioni e ottimizzazionePerformance and tuning

Per informazioni sui fattori chiave che influiscono sulle prestazioni dell'attività di copia e sui modi per ottimizzarle, vedere la Guida alle prestazioni delle attività di copia e all'ottimizzazione.Learn about key factors that affect the performance of Copy Activity and ways to optimize performance in the Copy Activity Performance and Tuning Guide.

Passaggi successiviNext steps

Per istruzioni dettagliate sulla creazione di una pipeline con l'attività di copia, vedere l'esercitazione sull'attività di copia.For step-by-step instructions for creating a pipeline with Copy Activity, see the Copy Activity tutorial.