Spostare dati da un server FTP usando Azure Data Factory

Questo articolo illustra come usare l'attività di copia in Azure Data Factory per spostare i dati da un server FTP. 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.

È possibile copiare dati da un server FTP a qualsiasi archivio dati di sink supportato. Per un elenco degli archivi dati supportati come sink dall'attività di copia, vedere la tabella relativa agli archivi dati supportati. Data Factory supporta attualmente solo lo spostamento di dati da un server FTP ad altri archivi dati, non da altri archivi dati a un server FTP. Supporta i server FTP locali e cloud.

Nota

L'attività di copia non elimina il file di origine dopo che è stato correttamente copiato nella destinazione. Se è necessario eliminare il file di origine dopo una copia con esito positivo, creare un'attività personalizzata per eliminare il file e usare l'attività nella pipeline.

Abilitare la connettività

Se si spostano dati da un server FTP locale in un archivio dati cloud, ad esempio in Archiviazione BLOB di Azure, installare e usare Gateway di gestione dati. Gateway di gestione dati è un agente client installato nel computer locale, che consente ai servizi cloud di connettersi alla risorsa locale. Per informazioni dettagliate, vedere Gateway di gestione dati. Per istruzioni dettagliate sulla configurazione e sull'uso del gateway, vedere Spostare dati tra origini locali e il cloud. Il gateway consente di connettersi a un server FTP anche se il server si trova in una macchina virtuale (VM) di infrastruttura distribuita come servizio (IaaS) di Azure.

È possibile installare il gateway nello stesso computer locale o nella VM IaaS come server FTP. È tuttavia consigliabile installare il gateway in un computer separato o in una macchina virtuale IaaS distinta per evitare conflitti tra le risorse e ottenere prestazioni migliori. Quando si installa il gateway in un computer separato, questo deve poter accedere al server FTP.

Introduzione

È possibile creare una pipeline con l'attività di copia che sposta i dati da un'origine FTP usando diversi strumenti o API.

Il modo più semplice per creare una pipeline è usare la Copia guidata di Data Factory. Per una procedura dettagliata, vedere Esercitazione: Creare una pipeline usando la Copia guidata.

È possibile anche usare gli strumenti seguenti per creare una pipeline: portale di Azure, Visual Studio, 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 usate per copiare dati da un archivio dati FTP, vedere la sezione Esempio JSON: copiare dati da un server FTP al BLOB di Azure di questo articolo.

Nota

Per altre informazioni sui formati di compressione e i file e supportati da usare, vedere Informazioni sui formati di compressione e sui file supportati da Azure Data Factory.

Le sezioni seguenti riportano informazioni dettagliate sulle proprietà JSON che vengono usate per definire entità di Data Factory specifiche di FTP.

Proprietà del servizio collegato

La tabella seguente descrive gli elementi JSON specifici di un servizio collegato FTP.

Proprietà Descrizione Obbligatorio Predefinito
type Impostare su FtpServer.  
host Specificare il nome o indirizzo IP del server FTP.  
authenticationType Specificare il tipo di autenticazione. Di base, anonimo
username Specificare l'utente che ha accesso al server FTP. No  
password Specificare la password per l'utente (nome utente). No  
encryptedCredential Specificare le credenziali crittografate per accedere al server FTP. No  
gatewayName Specificare il nome del gateway in Gateway di gestione dati per connettersi a un server FTP locale. No  
port Specificare la porta su cui è in ascolto il server FTP. No 21
enableSsl Specificare se usare FTP su un canale SSL/TLS. No true
enableServerCertificateValidation Specificare se abilitare la convalida del certificato SSL del server quando si usa FTP sul canale SSL/TLS. No true

Usare l'autenticazione anonima

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {        
            "authenticationType": "Anonymous",
              "host": "myftpserver.com"
        }
    }
}

Usare nome utente e password in testo normale per l'autenticazione di base

{
    "name": "FTPLinkedService",
      "properties": {
    "type": "FtpServer",
        "typeProperties": {
            "host": "myftpserver.com",
            "authenticationType": "Basic",
            "username": "Admin",
            "password": "123456"
        }
      }
}

Usare port, enableSsl, enableServerCertificateValidation

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "host": "myftpserver.com",
            "authenticationType": "Basic",    
            "username": "Admin",
            "password": "123456",
            "port": "21",
            "enableSsl": true,
            "enableServerCertificateValidation": true
        }
    }
}

Usare encryptedCredential per autenticazione e gateway

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "host": "myftpserver.com",
            "authenticationType": "Basic",
            "encryptedCredential": "xxxxxxxxxxxxxxxxx",
            "gatewayName": "mygateway"
        }
      }
}

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.

La sezione typeProperties è diversa per ogni tipo di set di dati. Fornisce informazioni specifiche del tipo di set di dati. La sezione typeProperties per un set di dati di tipo FileShare presenta le proprietà seguenti:

Proprietà Descrizione Obbligatorio
folderPath Sottopercorso alla cartella. Usare il carattere di escape "\" per i caratteri speciali nella stringa. Per ottenere alcuni esempi, vedere Servizio collegato di esempio e definizioni del set di dati .

È possibile combinare questa proprietà con partitionBy per ottenere percorsi di cartelle basati su data e ora di inizio e fine delle sezioni.
fileName Specificare il nome del file in folderPath se si vuole che la tabella faccia riferimento a un file specifico nella cartella. Se non si specifica alcun valore per questa proprietà, la tabella punta a tutti i file nella cartella.

Quando fileName non viene specificato per un set di dati di output, il formato del nome del file generato è il seguente:

Data.txt, ad esempio: Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt
No
fileFilter Specificare un filtro da usare per selezionare un sottoinsieme di file in folderPath anziché tutti i file.

I valori consentiti sono: * (più caratteri) e ? (carattere singolo).

Esempio 1: "fileFilter": "*.log"
Esempio 2: "fileFilter": 2014-1-?.txt"

fileFilter è applicabile per un set di dati di input FileShare. Questa proprietà non è supportata con Hadoop Distributed File System (HDFS).
No
partitionedBy Usata per specificare una proprietà folderPath e fileName dinamica per i dati della serie temporale. È ad esempio possibile specificare un folderPath contenente i parametri per ogni ora di dati. No
format Sono supportati i tipi di formato seguenti: TextFormat, JsonFormat, AvroFormat, OrcFormat e ParquetFormat. Impostare la proprietà type nell'area format su uno di questi valori. Per altre informazioni, vedere le sezioni Formato testo, Formato JSON, Formato AVRO, Formato OCR e Formato Parquet.

Per copiare i file così come sono tra archivi basati su file (copia binaria), è possibile ignorare la sezione del formato nelle definizioni dei set di dati di input e di output.
No
compressione Specificare il tipo e il livello di compressione dei dati. I tipi supportati sono GZip, Deflate, BZip2 e ZipDeflate, mentre i livelli supportati sono Ottimale e Più veloce. Per altre informazioni, vedere File e formati di compressione in Azure Data Factory. No
useBinaryTransfer Specificare se usare la modalità di trasferimento binario. I valori sono true per la modalità binaria (valore predefinito) e false per ASCII. Questa proprietà può essere usata solo quando il tipo di servizio collegato associato è di tipo: FtpServer. No
Nota

fileName e fileFilter non possono essere usati contemporaneamente.

Usare la proprietà partionedBy

Come indicato nella sezione precedente, è possibile specificare un valore folderPath e fileName dinamico per i dati delle serie temporali con la proprietà partitionedBy.

Per informazioni sui set di dati delle serie temporali, sulla pianificazione e sulle sezioni, vedere gli articoli relativi a creazione di set di dati, pianificazione ed esecuzione e creazione di pipeline.

Esempio 1

"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
    { "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],

In questo esempio {Slice} viene sostituito con il valore della variabile di sistema SliceStart di Data Factory nel formato specificato (AAAAMMGGHH). SliceStart fa riferimento all'ora di inizio della sezione. Il percorso cartella è diverso per ogni sezione. Ad esempio: wikidatagateway/wikisampledataout/2014100103 o wikidatagateway/wikisampledataout/2014100104.

Esempio 2

"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"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" } }
],

In questo esempio l'anno, il mese, il giorno e l'ora di SliceStart vengono estratti in variabili separate che vengono usate dalle proprietà folderPath e fileName.

Proprietà dell'attività di copia

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere l'articolo sulla creazione di pipeline. Per tutti i tipi di attività sono disponibili proprietà come nome, descrizione, tabelle di input e output e criteri.

D'altra parte, le proprietà disponibili nella sezione typeProperties dell'attività variano in base al tipo di attività. Per l'attività di copia, le proprietà del tipo variano in base ai tipi di origine e sink.

Nell'attività di copia con origine di tipo FileSystemSource, nella sezione typeProperties sono disponibili le proprietà seguenti:

Proprietà Descrizione Valori consentiti Obbligatorio
ricorsiva Indica se i dati vengono letti in modo ricorsivo dalle cartelle secondarie o solo dalla cartella specificata. True, False (valore predefinito) No

Esempio JSON: copiare i dati dal server FTP in BLOB di Azure

Questo esempio illustra come copiare dati dal server FTP in Archiviazione BLOB di Azure. I dati possono tuttavia essere copiati direttamente in uno qualsiasi dei sink indicati nella sezione Archivi dati e formati supportati, usando l'attività di copia in Data Factory.

Gli esempi seguenti specificano le definizioni JSON di esempio da usare per creare una pipeline con il portale di Azure, Visual Studio o PowerShell:

Nell'esempio i dati vengono copiati da un server FTP a un BLOB di Azure ogni ora. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.

Servizio collegato FTP

Questo esempio usa l'autenticazione di base con il nome utente e la password in testo normale. È possibile anche usare uno dei tre metodi seguenti:

  • Autenticazione anonima
  • Autenticazione di base con credenziali crittografate
  • FTP su SSL/TLS (FTPS)

Per i diversi tipi di autenticazione disponibili, vedere la sezione relativa al servizio collegato FTP.

{
    "name": "FTPLinkedService",
    "properties": {
    "type": "FtpServer",
    "typeProperties": {
        "host": "myftpserver.com",           
        "authenticationType": "Basic",
        "username": "Admin",
        "password": "123456"
    }
  }
}

Servizio collegato Archiviazione di Azure

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

Set di dati di input FTP

Questo set di dati fa riferimento alla cartella FTP mysharedfolder e al file test.csv. La pipeline copia il file nella destinazione.

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.

{
  "name": "FTPFileInput",
  "properties": {
    "type": "FileShare",
    "linkedServiceName": "FTPLinkedService",
    "typeProperties": {
      "folderPath": "mysharedfolder",
      "fileName": "test.csv",
      "useBinaryTransfer": true
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

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

Un'attività di copia in una pipeline con un'origine su file system e un sink BLOB

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 FileSystemSource e il tipo di sink è impostato su BlobSink.

{
    "name": "pipeline",
    "properties": {
        "activities": [{
            "name": "FTPToBlobCopy",
            "inputs": [{
                "name": "FtpFileInput"
            }],
            "outputs": [{
                "name": "AzureBlobOutput"
            }],
            "type": "Copy",
            "typeProperties": {
                "source": {
                    "type": "FileSystemSource"
                },
                "sink": {
                    "type": "BlobSink"
                }
            },
            "scheduler": {
                "frequency": "Hour",
                "interval": 1
            },
            "policy": {
                "concurrency": 1,
                "executionPriorityOrder": "NewestFirst",
                "retry": 1,
                "timeout": "00:05:00"
            }
        }],
        "start": "2016-08-24T18:00:00Z",
        "end": "2016-08-24T19:00:00Z"
    }
}
Nota

Per eseguire il mapping dal set di dati di origine alle colonne del set di dati sink, vedere Mapping delle colonne del set di dati in Azure Data Factory.

Passaggi successivi

Vedere gli articoli seguenti: