Spostare i dati da DB2 mediante Data factory di Azure

Questo articolo illustra come usare l'attività di copia in una data factory di Azure per copiare dati da un database DB2 locale in qualsiasi archivio dati elencato nella colonna Sink della sezione relativa alle origini e ai sink supportati . Questo articolo si basa sull'articolo Attività di spostamento dei dati , che offre una panoramica generale dello spostamento dei dati con attività di copia e delle combinazioni di archivio dati supportate.

Data Factory supporta attualmente solo lo spostamento dei dati da un database DB2 agli archivi dati sink supportatie non supporta lo spostamento dei dati da altri archivi dati in un database DB2.

Prerequisiti

Data Factory supporta la connessione a database DB2 locali tramite il Gateway di gestione dati. Vedere l'articolo Gateway di gestione dati per informazioni sul Gateway di gestione dati e l'articolo Spostare dati tra origini locali e il cloud con Gateway di gestione dati per istruzioni dettagliate su come configurare un gateway e una pipeline di dati per spostare i dati.

Il gateway è necessario anche se il DB2 è ospitato in una macchina virtuale IaaS di Azure. È possibile installare il gateway nella stessa VM IaaS dell'archivio dati o in una macchina virtuale diversa, purché il gateway possa connettersi al database.

Il Gateway di gestione dati offre un driver DB2 integrato, perciò non è necessario installare manualmente eventuali driver quando si copiano dati da DB2.

Nota

Per suggerimenti sulla risoluzione di problemi correlati alla connessione o al gateway, vedere Risoluzione dei problemi del gateway .

Versioni supportate

Il connettore DB2 supporta le piattaforme e le versioni di IBM DB2 seguenti con DRDA (Distributed Relational Database Architecture) SQLAM (SQL Access Manager) versione 9, 10 e 11:

  • IBM DB2 per z/OS 11.1
  • IBM DB2 per z/OS 10.1
  • IBM DB2 per i 7.2
  • IBM DB2 per i 7.1
  • IBM DB2 per LUW 11
  • IBM DB2 per LUW 10.5
  • IBM DB2 per LUW 10.1
Suggerimento

Se si riceve un messaggio d'errore che indica che "Non è stato trovato il pacchetto corrispondente a una richiesta di esecuzione dell'istruzione SQL. SQLSTATE=51002 SQLCODE=805", il motivo è che non viene creato un pacchetto necessario per un utente normale in tale sistema operativo. Seguire le istruzioni riportate di seguito in base al tipo di server DB2:

  • DB2 per i (AS400): consente all'utente esperto di creare una raccolta per l'utente di accesso prima di usare l'attività di copia. Comando: create collection <username>
  • DB2 per z/OS o LUW: usare un account con privilegi elevati - utente esperto o amministratore con autorità di pacchetto e autorizzazioni BIND, BINDADD, GRANT EXECUTE TO PUBLIC, per eseguire una volta l'attività di copia, quindi il pacchetto necessario verrà creato automaticamente durante la copia. In seguito è possibile tornare a essere un utente normale per le successive esecuzioni delle operazioni di copia.

Introduzione

È possibile creare una pipeline con l'attività di copia che sposta i dati da e verso un archio dati DB2 usando diversi strumenti/API.

  • Il modo più semplice per creare una pipeline è usare la Copia guidata. Vedere Esercitazione: Creare una pipeline usando la Copia guidata per la procedura dettagliata sulla creazione di una pipeline attenendosi alla procedura guidata per copiare i dati.
  • È possibile anche usare gli strumenti seguenti per creare una pipeline: portale di Azure, Visual Studio, Azure PowerShell, modello di Azure Resource Manager, API .NET e API REST. Vedere l'esercitazione sull'attività di copia per le istruzioni dettagliate sulla creazione di una pipeline con un'attività di copia.

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:

  1. Creare i servizi collegati per collegare gli archivi di dati di input e output alla data factory.
  2. Creare i set di dati per rappresentare i dati di input e di output per le operazioni di copia.
  3. Creare una pipeline con un'attività di copia che accetti un set di dati come input e un set di dati come output.

Quando si usa la procedura guidata, le definizioni JSON per queste entità di data factory (servizi, set di dati e pipeline collegati) vengono create automaticamente. Quando si usano gli strumenti o le API, ad eccezione delle API .NET, usare il formato JSON per definire le entità di data factory. Per un esempio con definizioni JSON per entità di data factory utilizzate per copiare dati da un archivio dati DB2 locale, vedere la sezione Esempio JSON: Copiare dati da DB2 a BLOB di Azure di questo articolo.

Le sezioni seguenti riportano informazioni dettagliate sulle proprietà JSON che vengono usate per definire entità di data factory specifiche di un archivio dati DB2:

Proprietà del servizio collegato

La tabella seguente contiene le descrizioni degli elementi JSON specifici del servizio collegato DB2.

Proprietà Descrizione Obbligatorio
type La proprietà del tipo deve essere impostata su: OnPremisesDB2
server Nome del server DB2.
database Nome del database DB2.
schema Nome dello schema nel database. Il nome dello schema fa distinzione tra maiuscole e minuscole. No
authenticationType Tipo di autenticazione usato per connettersi al database DB2. I valori possibili sono: anonima, di base e Windows.
username Specificare il nome utente se si usa l'autenticazione di base o Windows. No
password Specificare la password per l'account utente specificato per il nome utente. No
gatewayName Nome del gateway che il servizio Data factory deve usare per connettersi al database DB2 locale.

Proprietà dei set di dati

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione di set di dati, vedere l'articolo sulla creazione di set di dati. Le sezioni come struttura, disponibilità e criteri di un set di dati JSON sono simili per tutti i tipi di set di dati, ad esempio Azure SQL, BLOB di Azure, tabelle di Azure e così via.

La sezione typeProperties è diversa per ogni tipo di set di dati e contiene informazioni sulla posizione dei dati nell'archivio dati. La sezione typeProperties per il set di dati di tipo RelationalTable (che comprende il set di dati DB2) presenta le proprietà seguenti.

Proprietà Descrizione Obbligatorio
tableName Nome della tabella nell'istanza del database DB2 a cui fa riferimento il servizio collegato. La proprietà tableName fa distinzione tra maiuscole e minuscole. No (se la query di RelationalSource è specificata)

Proprietà dell'attività di copia

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, fare riferimento all'articolo Creazione di pipeline. Per tutti i tipi di attività sono disponibili proprietà come nome, descrizione, tabelle di input e output e criteri.

Le proprietà disponibili nella sezione typeProperties dell'attività variano invece in base al tipo di attività. Per l'attività di copia variano in base ai tipi di origine e sink.

Per attività di copia con origine di tipo RelationalSource (che comprende DB2), sono disponibili le proprietà seguenti nella sezione typeProperties:

Proprietà Descrizione Valori consentiti Obbligatorio
query Usare la query personalizzata per leggere i dati. Stringa di query SQL. Ad esempio: "query": "select * from "MySchema"."MyTable"". No (se tableName di set di dati è specificato)
Nota

I nomi di schemi e tabelle fanno distinzione tra maiuscole e minuscole. Racchiudere i nomi tra "" (virgolette doppie) nella query.

Esempio:

"query": "select * from "DB2ADMIN"."Customers""

Esempio JSON: Copiare dati da DB2 a BLOB di Azure

Questo esempio fornisce le definizioni JSON di esempio da usare per creare una pipeline con il Portale di Azure, Visual Studio o Azure PowerShell. Illustra come copiare dati da un database DB2 in un archivio BLOB di Azure. Tuttavia, i dati possono essere copiati in qualsiasi sink dichiarato qui usando l'attività di copia in Azure Data Factory.

L'esempio include le entità di Data factory seguenti:

  1. Un servizio collegato di tipo OnPremisesDb2.
  2. Un servizio collegato di tipo AzureStorage.
  3. Un set di dati di input di tipo RelationalTable.
  4. Un set di dati di output di tipo AzureBlob.
  5. Una pipeline con attività di copia che usa RelationalSource e BlobSink.

L'esempio copia i dati da un risultato della query in un database DB2 a un BLOB di Azure ogni ora. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.

Innanzitutto, installare e configurare un gateway di gestione dati. Le istruzioni si trovano nell'articolo Spostare dati tra percorsi locali e il cloud .

Servizio collegato DB2:

{
    "name": "OnPremDb2LinkedService",
    "properties": {
        "type": "OnPremisesDb2",
        "typeProperties": {
            "server": "<server>",
            "database": "<database>",
            "schema": "<schema>",
            "authenticationType": "<authentication type>",
            "username": "<username>",
            "password": "<password>",
            "gatewayName": "<gatewayName>"
        }
    }
}

Servizio collegato di archiviazione BLOB di Azure:

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

Set di dati di input DB2:

L'esempio presuppone che sia stata creata una tabella "MyTable" in DB2 e che contenga una colonna denominata "timestamp" per i dati di una serie temporale.

Impostando "external" su "true" si comunica al servizio Data Factory che il set di dati è esterno alla data factory e non è prodotto da un'attività al suo interno. Si noti che il valore type è impostato su RelationalTable.

{
    "name": "Db2DataSet",
    "properties": {
        "type": "RelationalTable",
        "linkedServiceName": "OnPremDb2LinkedService",
        "typeProperties": {},
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {
            "externalData": {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

Set di dati di output del BLOB di Azure:

I dati vengono scritti in un nuovo BLOB ogni ora (frequenza: ora, intervallo: 1). Il percorso della cartella per il BLOB viene valutato dinamicamente in base all'ora di inizio della sezione in fase di elaborazione. Il percorso della cartella usa le parti anno, mese, giorno e ora dell'ora di inizio.

{
    "name": "AzureBlobDb2DataSet",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/db2/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
        }
    }
}

Pipeline con attività di copia:

La pipeline contiene un'attività di copia configurata per usare i set di dati di input e output ed è programmata per essere eseguita ogni ora. Nella definizione JSON della pipeline, il tipo di origine è impostato su RelationalSource e il tipo di sink è impostato su BlobSink. La query SQL specificata per la proprietà query seleziona i dati dalla tabella Orders.

{
    "name": "CopyDb2ToBlob",
    "properties": {
        "description": "pipeline for copy activity",
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "RelationalSource",
                        "query": "select * from \"Orders\""
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                },
                "inputs": [
                    {
                        "name": "Db2DataSet"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobDb2DataSet"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00",
                    "concurrency": 1
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "Db2ToBlob"
            }
        ],
        "start": "2014-06-01T18:00:00Z",
        "end": "2014-06-01T19:00:00Z"
    }
}

Mapping dei tipi per DB2

Come accennato nell'articolo Attività di spostamento dei dati , l'attività di copia esegue conversioni di tipi automatiche da tipi di origine a tipi di sink con l'approccio seguente in 2 passaggi:

  1. Conversione dai tipi di origine nativi al tipo .NET
  2. Conversione dal tipo .NET al tipo di sink nativo

Quando si spostano i dati in DB2 vengono usati i mapping seguenti dal tipo DB2 al tipo .NET.

Tipo di database DB2 Tipo di .NET Framework
SmallInt Int16
Integer Int32
BigInt Int64
Real Single
Double Double
Float Double
Decimal Decimal
DecimalFloat Decimal
Numeric Decimal
Date Datetime
Time TimeSpan
Timestamp Datetime
xml Byte[]
Char String
VarChar String
LongVarChar String
DB2DynArray String
Binary Byte[]
VarBinary Byte[]
LongVarBinary Byte[]
Graphic String
VarGraphic String
LongVarGraphic String
Clob String
BLOB Byte[]
DbClob String
SmallInt Int16
Integer Int32
BigInt Int64
Real Single
Double Double
Float Double
Decimal Decimal
DecimalFloat Decimal
Numeric Decimal
Date Datetime
Time TimeSpan
Timestamp Datetime
xml Byte[]
Char String

Eseguire il mapping delle colonne dell'origine alle colonne del sink

Per informazioni sul 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.

Lettura ripetibile da origini relazionali

Quando si copiano dati da archivi dati relazionali, è necessario tenere presente la ripetibilità per evitare risultati imprevisti. In Azure Data Factory è possibile rieseguire una sezione manualmente. È anche possibile configurare i criteri di ripetizione per un set di dati in modo da rieseguire una sezione in caso di errore. Quando una sezione viene rieseguita in uno dei due modi, è necessario assicurarsi che non vengano letti gli stessi dati, indipendentemente da quante volte viene eseguita la sezione. Vedere Lettura ripetibile da origini relazionali.

Ottimizzazione delle prestazioni

Per informazioni sui fattori chiave che influiscono sulle prestazioni dello spostamento dei dati, ovvero dell'attività di copia, in Azure Data Factory e sui vari modi per ottimizzare tali prestazioni, vedere la Guida alle prestazioni delle attività di copia e all'ottimizzazione.