Copiare dati da e in un file system locale usando Azure Data Factory

Questo articolo illustra come usare l'attività di copia in Azure Data Factory per copiare dati da e in un file system locale. 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.

Scenari supportati

È possibile copiare dati da un file system locale negli archivi dati seguenti:

Categoria Archivio dati
Azure Archivio BLOB di Azure
Archivio Data Lake di Azure
Azure Cosmos DB (API di DocumentDB)
Database SQL di Azure
Azure SQL Data Warehouse
Indice di Ricerca di Azure
Archivio tabelle di Azure
Database SQL Server
Oracle
File File system

È possibile copiare i dati dagli archivi dati seguenti in un file system locale:

Categoria Archivio dati
Azure Archivio BLOB di Azure
Azure Cosmos DB (API di DocumentDB)
Archivio Data Lake di Azure
Database SQL di Azure
Azure SQL Data Warehouse
Archivio tabelle di Azure
Database Amazon Redshift
DB2
MySQL
Oracle
PostgreSQL
SAP Business Warehouse
SAP HANA
SQL Server
Sybase
Teradata
NoSQL Cassandra
MongoDB
File Amazon S3
File system
FTP
HDFS
SFTP
Altro HTTP generico
OData generico
ODBC generico
Salesforce
Tabella Web (tabella da HTML)
GE Historian
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.

Abilitazione della connettività

Data Factory supporta la connessione da e verso il file system locale tramite il Gateway di gestione dati. È necessario installare il Gateway di gestione di dati nell'ambiente locale per consentire al servizio Data Factory per connettersi a qualsiasi archivio dati locale supportato, incluso il file system. Per informazioni sul Gateway di gestione dati e per istruzioni dettagliate sulla configurazione del gateway vedere l'articolo Spostare dati tra origini locali e il cloud con Gateway di gestione dati. Non è necessario installare altri file binari per la comunicazione da e verso il file system locale, tranne il Gateway di gestione dati. È necessario installare e usare il Gateway di gestione dati anche se il file system si trova in una macchina virtuale di Azure IaaS. Per informazioni dettagliate sul gateway, vedere Gateway di gestione dati.

Per usare una condivisione di file Linux, installare Samba sul server Linux e installare il Gateway di gestione dati in un server Windows. L'installazione di un Gateway di gestione dati su un server Linux non è supportata.

Introduzione

È possibile creare una pipeline con l'attività di copia che sposta i dati da e verso un file system 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 una data factory. Una data factory può contenere una o più pipeline.
  2. Creare i servizi collegati per collegare gli archivi di dati di input e output alla data factory. Ad esempio, se si copiano dati da un archivio BLOB di Azure a un file system locale, si creano due servizi collegati per collegare il file system locale e l'account di archiviazione di Azure alla data factory. Per le proprietà del servizio collegato specifiche del file system locale, vedere la sezione sulle proprietà del servizio collegato.
  3. Creare i set di dati per rappresentare i dati di input e di output per le operazioni di copia. Nell'esempio citato nel passaggio precedente, si crea un set di dati per specificare un contenitore BLOB e la cartella che contiene i dati di input. Si crea anche un altro set di dati per specificare la cartella e il nome file (facoltativo) nel file system. Per le proprietà del set di dati specifiche del file system locale, vedere la sezione sulle proprietà del set di dati.
  4. Creare una pipeline con un'attività di copia che accetti un set di dati come input e un set di dati come output. Nell'esempio indicato in precedenza si usa BlobSource come origine e FileSystemSink come sink per l'attività di copia. Analogamente, se si effettua la copia dal file system locale all'archivio BLOB di Azure, si usa FileSystemSource e BlobSink nell'attività di copia. Per le proprietà dell'attività di copia specifiche del file system locale, vedere la sezione sulle proprietà dell'attività di copia. Per informazioni dettagliate su come usare un archivio dati come origine o come sink, fare clic sul collegamento nella sezione precedente per l'archivio dati.

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 esempi con definizioni JSON per entità di data factory utilizzate per copiare i dati da e verso un file system, vedere la sezione degli esempi JSON in questo articolo.

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

Proprietà del servizio collegato

È possibile collegare un file system locale a una data factory di Azure con il servizio collegato del file server locale. La tabella seguente include le descrizioni degli elementi JSON specifici del servizio collegato del file server locale.

Proprietà Descrizione Obbligatorio
type Verificare che la proprietà type sia impostata su OnPremisesFileServer.
host Specifica il percorso radice della cartella da copiare. 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 .
userid Specificare l'ID dell'utente che ha accesso al server. No (se si sceglie encryptedCredential)
password Specificare la password per l'utente (userid). No (se si sceglie encryptedCredential)
encryptedCredential Specificare le credenziali crittografate che è possibile ottenere eseguendo il cmdlet New-AzureRmDataFactoryEncryptValue. No (se si sceglie di specificare ID utente e password in testo normale)
gatewayName Specifica il nome del gateway che Data Factory deve usare per connettersi al file server locale.

Servizio collegato di esempio e definizioni del set di dati

Scenario Host nella definizione del servizio collegato folderPath nella definizione del set di dati
Cartella locale nel computer del gateway di gestione dati:

Esempi: D:\* o D:\cartella\sottocartella\*
D:\\ (per Gateway di gestione dati versione 2.0 e successive)

localhost (per le versioni precedenti alla versione 2.0 di Gateway di gestione dati)
.\\ o cartella\\sottocartella (per Gateway di gestione dati 2.0 e versioni successive)

D:\\ o D:\\cartella\\sottocartella (per la versione del gateway precedente a 2.0)
Cartella condivisa remota:

Esempi: \\myserver\share\* o \\myserver\share\cartella\sottocartella\*
\\\\myserver\\share .\\ o cartella\\sottocartella

Esempio: Uso di nome utente e password in testo normale

{
  "Name": "OnPremisesFileServerLinkedService",
  "properties": {
    "type": "OnPremisesFileServer",
    "typeProperties": {
      "host": "\\\\Contosogame-Asia",
      "userid": "Admin",
      "password": "123456",
      "gatewayName": "mygateway"
    }
  }
}

Esempio: Uso di encryptedcredential

{
  "Name": " OnPremisesFileServerLinkedService ",
  "properties": {
    "type": "OnPremisesFileServer",
    "typeProperties": {
      "host": "D:\\",
      "encryptedCredential": "WFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5xxxxxxxxxxxxxxxxx",
      "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 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 e fornisce informazioni come la posizione e il formato dei dati nell'archivio dati. La sezione typeProperties per il set di dati di tipo FileShare presenta le proprietà seguenti:

Proprietà Descrizione Obbligatorio
folderPath Specifica il percorso secondario della 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/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 è specificato per un set di dati di output e preserveHierarchy non è specificato nel sink dell'attività, il nome del file generato avrà il formato seguente:

Data.<Guid>.txt 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"

Si noti che fileFilter è applicabile per un set di dati di input FileShare.
No
partitionedBy È possibile usare partitionedBy per specificare un valore folderPath/fileName dinamico per i dati di una serie temporale. Un esempio è folderPath con 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 TextFormat, JsonFormat, AvroFormat, OrcFormat e ParquetFormat.

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. I livelli supportati sono Ottimale e Più veloce. vedere File e formati di compressione in Azure Data Factory. No
Nota

Non è possibile usare fileName e fileFilter contemporaneamente.

Uso della proprietà partitionedBy

Come indicato nella sezione precedente, è possibile specificare valori fileName e folderPath dinamici per i dati di una serie temporale con la proprietà partitionedBy, le funzioni di data factory e le variabili di sistema.

Per altri dettagli sui set di dati delle serie temporali, sulla pianificazione e sulle sezioni, vedere gli articoli 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 (AAAAMMGGHH). SliceStart fa riferimento all'ora di inizio della sezione. La proprietà folderPath è diversa per ogni sezione. Ad esempio: wikisampledataout/wikidatagateway/2014100103 o wikisampledataout/wikidatagateway/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 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à, fare riferimento all'articolo Creazione di pipeline. Proprietà quali nome, descrizione, criteri e set di dati di input e di output sono disponibili per tutti i tipi di attività. 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. Se si effettua il trasferimento dei dati da un file system locale, impostare il tipo di origine nell'attività di copia su FileSystemSource. Se si effettua il trasferimento dei dati verso un file system locale, impostare il tipo di sink nell'attività di copia su FileSystemSink. Questa sezione presenta un elenco delle proprietà supportate da FileSystemSource e FileSystemSink.

FileSystemSource supporta 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

FileSystemSink supporta le proprietà seguenti:

Proprietà Descrizione Valori consentiti Obbligatorio
copyBehavior Definisce il comportamento di copia quando l'origine è BlobSource o FileSystem. PreserveHierarchy: mantiene la gerarchia dei file nella cartella di destinazione. Il percorso relativo del file di origine nella cartella di origine è identico al percorso relativo del file di destinazione nella cartella di destinazione.

FlattenHierarchy: tutti i file della cartella di origine vengono creati nel primo livello della cartella di destinazione. Il nome dei file di destinazione viene generato automaticamente.

MergeFiles: unisce tutti i file della cartella di origine in un solo file. Se il nome file/BLOB viene specificato, il nome del file unito sarà il nome specificato. In caso contrario, verrà usato un nome file generato automaticamente.
No

esempi ricorsivi e copyBehavior

Questa sezione descrive il comportamento derivante dell'operazione di copia per diverse combinazioni di valori ricorsivi e delle proprietà copyBehavior.

valore ricorsivo valore di copyBehavior Comportamento risultante
true preserveHierarchy Per una cartella di origine Cartella1 con la struttura seguente,

Cartella1
    File1
    File2
    Sottocartella1
        File3
        File4
        File5

la cartella di destinazione Cartella1 viene creata con la stessa struttura dell'origine:

Cartella1
    File1
    File2
    Sottocartella1
        File3
        File4
        File5
true flattenHierarchy Per una cartella di origine Cartella1 con la struttura seguente,

Cartella1
    File1
    File2
    Sottocartella1
        File3
        File4
        File5

la Cartella1 di destinazione viene creata con la struttura seguente:

Cartella1
    Nome generato automaticamente per File1
    nome generato automaticamente per File2
    nome generato automaticamente per File3
    nome generato automaticamente per File4
    nome generato automaticamente per File5
true mergeFiles Per una cartella di origine Cartella1 con la struttura seguente,

Cartella1
    File1
    File2
    Sottocartella1
        File3
        File4
        File5

la Cartella1 di destinazione viene creata con la struttura seguente:

Cartella1
    Il contenuto di File1 + File2 + File3 + File4 + File 5 viene unito in un file con nome generato automaticamente.
false preserveHierarchy Per una cartella di origine Cartella1 con la struttura seguente,

Cartella1
    File1
    File2
    Sottocartella1
        File3
        File4
        File5

la Cartella1 di destinazione viene creata con la struttura seguente:

Cartella1
    File1
    File2

La sottocartella1 con File3, File4 e File5 non viene considerata.
false flattenHierarchy Per una cartella di origine Cartella1 con la struttura seguente,

Cartella1
    File1
    File2
    Sottocartella1
        File3
        File4
        File5

la Cartella1 di destinazione viene creata con la struttura seguente:

Cartella1
    Nome generato automaticamente per File1
    nome generato automaticamente per File2

La sottocartella1 con File3, File4 e File5 non viene considerata.
false mergeFiles Per una cartella di origine Cartella1 con la struttura seguente,

Cartella1
    File1
    File2
    Sottocartella1
        File3
        File4
        File5

la Cartella1 di destinazione viene creata con la struttura seguente:

Cartella1
    Il contenuto di File1 + File2 viene unito in un file con un nome file generato automaticamente.
    Nome generato automaticamente per File1

La sottocartella1 con File3, File4 e File5 non viene considerata.

Formati di file e di compressione supportati

Per i dettagli, vedere l'articolo relativo ai file e formati di compressione in Azure Data Factory.

Esempi JSON per la copia dei dati da e verso un file system

Gli esempi seguenti forniscono le definizioni JSON di esempio da usare per creare una pipeline con il portale di Azure, Visual Studio o Azure PowerShell. Questi esempi mostrano come copiare dati da e nel file system locale e in Archiviazione BLOB di Azure. È tuttavia possibile copiare dati direttamente da una qualsiasi delle origini in uno qualsiasi dei sink elencati in Sink e origini supportate tramite l'attività di copia in Azure Data Factory.

Esempio: Copiare i dati da un file system locale in Archiviazione BLOB di Azure

Questo esempio illustra come copiare dati da un file system locale in Archiviazione BLOB di Azure. L'esempio include le entità della data factory seguenti:

L'esempio seguente copia i dati appartenenti a una serie temporale da un file system locale in Archiviazione BLOB di Azure ogni ora. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.

Come primo passaggio configurare il Gateway di gestione dati secondo le istruzioni in Spostare dati tra origini locali e il cloud con Gateway di gestione dati.

Servizio collegato del file server locale:

{
  "Name": "OnPremisesFileServerLinkedService",
  "properties": {
    "type": "OnPremisesFileServer",
    "typeProperties": {
      "host": "\\\\Contosogame-Asia.<region>.corp.<company>.com",
      "userid": "Admin",
      "password": "123456",
      "gatewayName": "mygateway"
    }
  }
}

Si consiglia di usare la proprietà encryptedCredential anziché le proprietà userid e password. Per informazioni dettagliate su questo servizio collegato, vedere l'articolo relativo al servizio collegato del file server.

Servizio collegato Archiviazione di Azure:

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

Set di dati di input del file system locale:

I dati vengono prelevati da un nuovo file ogni ora. Le proprietà folderPath e fileName vengono determinate in base all'ora di inizio della sezione.

L'impostazione di "external": "true" comunica a Data Factory che il set di dati è esterno alla data factory e non è prodotto da un'attività al suo interno.

{
  "name": "OnpremisesFileSystemInput",
  "properties": {
    "type": " FileShare",
    "linkedServiceName": " OnPremisesFileServerLinkedService ",
    "typeProperties": {
      "folderPath": "mysharedfolder/yearno={Year}/monthno={Month}/dayno={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"
          }
        }
      ]
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

Set di dati di ouput di Archiviazione 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": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
      "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"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": "\t",
        "rowDelimiter": "\n"
      }
    },
    "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":"SamplePipeline",
    "properties":{  
    "start":"2015-06-01T18:00:00",
    "end":"2015-06-01T19:00:00",
    "description":"Pipeline for copy activity",
    "activities":[  
      {
        "name": "OnpremisesFileSystemtoBlob",
        "description": "copy activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "OnpremisesFileSystemInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureBlobOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "FileSystemSource"
          },
          "sink": {
            "type": "BlobSink"
          }
        },
       "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
     ]
   }
}

Esempio: Copiare i dati dal database SQL di Azure in un file system locale

L'esempio seguente mostra:

L'esempio copia i dati di una serie temporale da una tabella di Azure SQL a un sistema di file locale ogni ora. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.

Servizio collegato per il database SQL Azure:

{
  "name": "AzureSqlLinkedService",
  "properties": {
    "type": "AzureSqlDatabase",
    "typeProperties": {
      "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
    }
  }
}

Servizio collegato del file server locale:

{
  "Name": "OnPremisesFileServerLinkedService",
  "properties": {
    "type": "OnPremisesFileServer",
    "typeProperties": {
      "host": "\\\\Contosogame-Asia.<region>.corp.<company>.com",
      "userid": "Admin",
      "password": "123456",
      "gatewayName": "mygateway"
    }
  }
}

Si consiglia di usare la proprietà encryptedCredential anziché le proprietà userid e password. Per informazioni dettagliate su questo servizio collegato, vedere l'articolo relativo al servizio collegato del file system.

Set di dati di input SQL Azure:

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

L'impostazione di “external”: ”true” comunica a Data Factory che il set di dati è esterno alla data factory e non è prodotto da un'attività al suo interno.

{
  "name": "AzureSqlInput",
  "properties": {
    "type": "AzureSqlTable",
    "linkedServiceName": "AzureSqlLinkedService",
    "typeProperties": {
      "tableName": "MyTable"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

Set di dati di output del file system locale:

I dati vengono copiati in un nuovo file ogni ora. folderPath e fileName per il BLOB vengono determinati in base all'ora di inizio della sezione.

{
  "name": "OnpremisesFileSystemOutput",
  "properties": {
    "type": "FileShare",
    "linkedServiceName": " OnPremisesFileServerLinkedService ",
    "typeProperties": {
      "folderPath": "mysharedfolder/yearno={Year}/monthno={Month}/dayno={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"
          }
        }
      ]
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

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

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 source è impostato su SqlSource e il tipo sink è impostato su FileSystemSink. La query SQL specificata per la proprietà SqlReaderQuery consente di selezionare i dati da copiare nell'ultima ora.

{  
    "name":"SamplePipeline",
    "properties":{  
    "start":"2015-06-01T18:00:00",
    "end":"2015-06-01T20:00:00",
    "description":"pipeline for copy activity",
    "activities":[  
      {
        "name": "AzureSQLtoOnPremisesFile",
        "description": "copy activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureSQLInput"
          }
        ],
        "outputs": [
          {
            "name": "OnpremisesFileSystemOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "SqlSource",
            "SqlReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd}\\' AND timestampcolumn < \\'{1:yyyy-MM-dd}\\'', WindowStart, WindowEnd)"
          },
          "sink": {
            "type": "FileSystemSink"
          }
        },
       "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 3,
          "timeout": "01:00:00"
        }
      }
     ]
   }
}

È anche possibile eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati sink nella definizione dell'attività di copia. Per altre informazioni, vedere Mapping delle colonne del set di dati in Azure Data Factory.

Prestazioni e ottimizzazione

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.