Copiare dati da e nel database SQL di Azure con Azure Data FactoryCopy data to and from Azure SQL Database 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 Connettore del database SQL di Azure nella versione 2.If you are using the current version of the Data Factory service, see Azure SQL Database connector in V2.

Questo articolo illustra come usare l'attività di copia in Azure Data Factory per spostare i dati da e verso database SQL di Azure.This article explains how to use the Copy Activity in Azure Data Factory to move data to and from Azure SQL Database. 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.It builds on the Data Movement Activities article, which presents a general overview of data movement with the copy activity.

Scenari supportatiSupported scenarios

È possibile copiare i dati da un database SQL di Azure negli archivi di dati seguenti:You can copy data from Azure SQL Database to the following data stores:

CategoryCategory Archivio datiData store
AzureAzure Archivio BLOB di AzureAzure Blob storage
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Database SQL di AzureAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Indice di Ricerca di AzureAzure Search Index
Archivio tabelle di AzureAzure Table storage
DatabaseDatabases SQL ServerSQL Server
OracleOracle
FileFile File systemFile system

È possibile copiare i dati dagli archivi dati seguenti a un database SQL di Azure:You can copy data from the following data stores to Azure SQL Database:

CategoryCategory Archivio datiData store
AzureAzure Archivio BLOB di AzureAzure Blob storage
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Database SQL di AzureAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Archivio tabelle di AzureAzure Table storage
DatabaseDatabases Amazon RedshiftAmazon Redshift
DB2DB2
MySQLMySQL
OracleOracle
PostgreSQLPostgreSQL
SAP Business WarehouseSAP Business Warehouse
SAP HANASAP HANA
SQL ServerSQL Server
SybaseSybase
TeradataTeradata
NoSQLNoSQL CassandraCassandra
MongoDBMongoDB
FileFile Amazon S3Amazon S3
File systemFile system
FTPFTP
HDFSHDFS
SFTPSFTP
AltroOthers HTTP genericoGeneric HTTP
OData genericoGeneric OData
ODBC genericoGeneric ODBC
SalesforceSalesforce
Tabella Web (tabella da HTML)Web table (table from HTML)

Tipo di autenticazione supportatoSupported authentication type

Il connettore per database SQL di Azure supporta l'autenticazione di base.Azure SQL Database connector supports basic authentication.

IntroduzioneGetting started

È possibile creare una pipeline con l'attività di copia che sposta i dati da e verso un database SQL di Azure usando diversi strumenti/API.You can create a pipeline with a copy activity that moves data to/from an Azure SQL Database by using different tools/APIs.

Il modo più semplice per creare una pipeline è usare la Copia guidata.The easiest way to create a pipeline is to use the Copy Wizard. Per istruzioni dettagliate, vedere Esercitazione: Creare una pipeline usando la Copia guidata per una procedura dettagliata sulla creazione di una pipeline attenendosi alla procedura guidata per copiare i dati.See Tutorial: Create a pipeline using Copy Wizard for a quick walkthrough on creating a pipeline using the Copy data wizard.

Per creare una pipeline, è anche possibile usare gli strumenti seguenti: Visual Studio, Azure PowerShell, modello Azure Resource Manager, API .NET, e API REST.You can also use the following tools to create a pipeline: Visual Studio, Azure PowerShell, Azure Resource Manager template, .NET API, and REST API. Vedere l'esercitazione sull'attività di copia per le istruzioni dettagliate sulla creazione di una pipeline con un'attività di copia.See Copy activity tutorial for step-by-step instructions to create a pipeline with a copy activity.

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 una data factory.Create a data factory. Una data factory può contenere una o più pipeline.A data factory may contain one or more pipelines.
  2. Creare i servizi collegati per collegare gli archivi di dati di input e output alla data factory.Create linked services to link input and output data stores to your data factory. Ad esempio, se si copiano i dati da un'archiviazione BLOB di Azure in un database SQL di Azure, si creano due servizi collegati per collegare l'account di archiviazione di Azure e il database SQL di Azure alla data factory.For example, if you are copying data from an Azure blob storage to an Azure SQL database, you create two linked services to link your Azure storage account and Azure SQL database to your data factory. Per le proprietà del servizio collegato specifiche per il database SQL di Azure, vedere la sezione sulle proprietà del servizio collegato.For linked service properties that are specific to Azure SQL Database, see linked service properties section.
  3. 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. 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.In the example mentioned in the last step, you create a dataset to specify the blob container and folder that contains the input data. Si crea anche un altro set di dati per specificare la tabella SQL nel database SQL di Azure che contiene i dati copiati dall'archiviazione BLOB.And, you create another dataset to specify the SQL table in the Azure SQL database that holds the data copied from the blob storage. Per le proprietà del set di dati specifiche per Azure Data Lake Store, vedere la sezione sulle proprietà del set di dati.For dataset properties that are specific to Azure Data Lake Store, see dataset properties section.
  4. 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. Nell'esempio indicato in precedenza si usa BlobSource come origine e SqlSink come sink per l'attività di copia.In the example mentioned earlier, you use BlobSource as a source and SqlSink as a sink for the copy activity. Analogamente, se si esegue la copia dal database SQL di Azure nell'archiviazione BLOB di Azure, si usa SqlSource e BlobSink nell'attività di copia.Similarly, if you are copying from Azure SQL Database to Azure Blob Storage, you use SqlSource and BlobSink in the copy activity. Per le proprietà dell'attività di copia specifiche per il database SQL di Azure, vedere la sezione sulle proprietà dell'attività di copia.For copy activity properties that are specific to Azure SQL Database, see copy activity properties section. 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.For details on how to use a data store as a source or a sink, click the link in the previous section for your data store.

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.When you use the wizard, JSON definitions for these Data Factory entities (linked services, datasets, and the pipeline) are automatically created for you. Quando si usano gli strumenti o le API, ad eccezione delle API .NET, usare il formato JSON per definire le entità di data factory.When you use tools/APIs (except .NET API), you define these Data Factory entities by using the JSON format. Per esempi con definizioni JSON per entità di data factory utilizzate per copiare i dati da e verso un database SQL di Azure, vedere la sezione degli esempi JSON in questo articolo.For samples with JSON definitions for Data Factory entities that are used to copy data to/from an Azure SQL Database, see JSON examples section of this article.

Le sezioni seguenti riportano informazioni dettagliate sulle proprietà JSON che vengono usate per definire entità di data factory specifiche di un database SQL di Azure:The following sections provide details about JSON properties that are used to define Data Factory entities specific to Azure SQL Database:

Proprietà del servizio collegatoLinked service properties

Un servizio collegato SQL di Azure collega un database SQL di Azure alla data factory.An Azure SQL linked service links an Azure SQL database to your data factory. La tabella seguente fornisce la descrizione degli elementi JSON specifici del servizio collegato SQL di Azure.The following table provides description for JSON elements specific to Azure SQL linked service.

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
typetype La proprietà type deve essere impostata su: AzureSqlDatabaseThe type property must be set to: AzureSqlDatabase YesYes
connectionStringconnectionString Specificare le informazioni necessarie per connettersi all'istanza di database SQL di Azure per la proprietà connectionString.Specify information needed to connect to the Azure SQL Database instance for the connectionString property. È supportata solo l'autenticazione di base.Only basic authentication is supported. YesYes

Importante

Configurare il firewall del database SQL di Azure e il server di database in modo da consentire ai servizi di Azure di accedere al server.Configure Azure SQL Database Firewall the database server to allow Azure Services to access the server. Se si copiano dati nel database SQL di Azure dall'esterno di Azure e da origini dati locali con gateway di data factory, configurare anche un intervallo di indirizzi IP appropriato per il computer che invia dati al database SQL di Azure.Additionally, if you are copying data to Azure SQL Database from outside Azure including from on-premises data sources with data factory gateway, configure appropriate IP address range for the machine that is sending data to Azure SQL Database.

Proprietà del set di datiDataset properties

Per specificare un set di dati per rappresentare i dati di input o output in un database SQL di Azure, impostare la proprietà del tipo del set di dati su AzureSqlTable.To specify a dataset to represent input or output data in an Azure SQL database, you set the type property of the dataset to: AzureSqlTable. Impostare la proprietà linkedServiceName del set di dati sul nome del servizio collegato SQL di Azure.Set the linkedServiceName property of the dataset to the name of the Azure SQL linked service.

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.For a full list of sections & properties available for defining datasets, see the Creating datasets article. 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.Sections such as structure, availability, and policy of a dataset JSON are similar for all dataset types (Azure SQL, Azure blob, Azure table, etc.).

La sezione typeProperties è diversa per ogni tipo di set di dati e contiene informazioni sulla posizione dei dati nell'archivio dati.The typeProperties section is different for each type of dataset and provides information about the location of the data in the data store. La sezione typeProperties per il set di dati di tipo AzureSqlTable presenta le proprietà seguenti:The typeProperties section for the dataset of type AzureSqlTable has the following properties:

ProprietàProperty DescrizioneDescription ObbligatorioRequired
tableNametableName Nome della tabella o vista nell'istanza di database SQL di Azure a cui fa riferimento il servizio collegato.Name of the table or view in the Azure SQL Database instance that linked service refers to. Yes

Proprietà dell'attività di copiaCopy activity properties

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, fare riferimento all'articolo Creazione di pipeline.For a full list of sections & properties available for defining activities, see the Creating Pipelines article. Per tutti i tipi di attività sono disponibili proprietà come nome, descrizione, tabelle di input e output e criteri.Properties such as name, description, input and output tables, and policy are available for all types of activities.

Nota

L'attività di copia accetta solo un input e produce solo un output.The Copy Activity takes only one input and produces only one output.

Le proprietà disponibili nella sezione typeProperties dell'attività variano invece in base al tipo di attività.Whereas, properties available in the typeProperties section of the activity vary with each activity type. Per l'attività di copia variano in base ai tipi di origine e sink.For Copy activity, they vary depending on the types of sources and sinks.

Se si effettua il trasferimento dei dati da un database SQL di Azure, impostare il tipo di origine nell'attività di copia su SqlSource.If you are moving data from an Azure SQL database, you set the source type in the copy activity to SqlSource. Analogamente, se si effettua il trasferimento dei dati in un database SQL di Azure, impostare il tipo di sink nell'attività di copia su SqlSink.Similarly, if you are moving data to an Azure SQL database, you set the sink type in the copy activity to SqlSink. Questa sezione presenta un elenco delle proprietà supportate da SqlSource e SqlSink.This section provides a list of properties supported by SqlSource and SqlSink.

SqlSourceSqlSource

In caso di attività di copia con origine di tipo SqlSource, nella sezione typeProperties sono disponibili le proprietà seguenti:In copy activity, when the source is of type SqlSource, the following properties are available in typeProperties section:

ProprietàProperty DESCRIZIONEDescription Valori consentitiAllowed values ObbligatorioRequired
sqlReaderQuerysqlReaderQuery Usare la query personalizzata per leggere i dati.Use the custom query to read data. Stringa di query SQL.SQL query string. Esempio: select * from MyTable.Example: select * from MyTable. NoNo
sqlReaderStoredProcedureNamesqlReaderStoredProcedureName Nome della stored procedure che legge i dati dalla tabella di origine.Name of the stored procedure that reads data from the source table. Nome della stored procedure.Name of the stored procedure. L'ultima istruzione SQL deve essere un'istruzione SELECT nella stored procedure.The last SQL statement must be a SELECT statement in the stored procedure. NoNo
storedProcedureParametersstoredProcedureParameters Parametri per la stored procedure.Parameters for the stored procedure. Coppie nome/valore.Name/value pairs. I nomi e le maiuscole e minuscole dei parametri devono corrispondere ai nomi e alle maiuscole e minuscole dei parametri della stored procedure.Names and casing of parameters must match the names and casing of the stored procedure parameters. NoNo

Se la proprietà sqlReaderQuery è specificata per SqlSource, l'attività di copia esegue questa query nell'origine del database SQL di Azure per ottenere i dati.If the sqlReaderQuery is specified for the SqlSource, the Copy Activity runs this query against the Azure SQL Database source to get the data. In alternativa, è possibile specificare una stored procedure indicando i parametri sqlReaderStoredProcedureName e storedProcedureParameters (se la stored procedure accetta parametri).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Se non si specifica sqlReaderQuery o sqlReaderStoredProcedureName, le colonne definite nella sezione della struttura del set di dati JSON vengono usate per compilare una query (select column1, column2 from mytable) da eseguire sul database SQL di Azure.If you do not specify either sqlReaderQuery or sqlReaderStoredProcedureName, the columns defined in the structure section of the dataset JSON are used to build a query (select column1, column2 from mytable) to run against the Azure SQL Database. Se la definizione del set di dati non dispone della struttura, vengono selezionate tutte le colonne della tabella.If the dataset definition does not have the structure, all columns are selected from the table.

Nota

Quando si usa sqlReaderStoredProcedureName è necessario specificare un valore per la proprietà tableName nel set di dati JSON.When you use sqlReaderStoredProcedureName, you still need to specify a value for the tableName property in the dataset JSON. Non sono disponibili convalide eseguite su questa tabella.There are no validations performed against this table though.

Esempio SqlSourceSqlSource example

"source": {
    "type": "SqlSource",
    "sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
    "storedProcedureParameters": {
        "stringData": { "value": "str3" },
        "identifier": { "value": "$$Text.Format('{0:yyyy}', SliceStart)", "type": "Int"}
    }
}

Definizione della stored procedure:The stored procedure definition:

CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
    @stringData varchar(20),
    @identifier int
)
AS
SET NOCOUNT ON;
BEGIN
    select *
    from dbo.UnitTestSrcTable
    where dbo.UnitTestSrcTable.stringData != stringData
    and dbo.UnitTestSrcTable.identifier != identifier
END
GO

SqlSinkSqlSink

SqlSink supporta le proprietà seguenti:SqlSink supports the following properties:

ProprietàProperty DESCRIZIONEDescription Valori consentitiAllowed values ObbligatorioRequired
writeBatchTimeoutwriteBatchTimeout Tempo di attesa per l'operazione di inserimento batch da completare prima del timeout.Wait time for the batch insert operation to complete before it times out. Intervallo di tempotimespan

Esempio: "00:30:00" (30 minuti).Example: “00:30:00” (30 minutes).
N.No
writeBatchSizewriteBatchSize Inserisce dati nella tabella SQL quando la dimensione del buffer raggiunge writeBatchSize.Inserts data into the SQL table when the buffer size reaches writeBatchSize. Numero intero (numero di righe)Integer (number of rows) No (valore predefinito: 10.000)No (default: 10000)
sqlWriterCleanupScriptsqlWriterCleanupScript Specificare una query da eseguire nell'attività di copia per pulire i dati di una sezione specifica.Specify a query for Copy Activity to execute such that data of a specific slice is cleaned up. Per altre informazioni, vedere la copia ripetibile.For more information, see repeatable copy. Istruzione di query.A query statement. N.No
sliceIdentifierColumnNamesliceIdentifierColumnName Specificare il nome di una colonna in cui inserire nell'attività di copia l'identificatore di sezione generato automaticamente che verrà usato per pulire i dati di una sezione specifica quando viene ripetuta l'esecuzione.Specify a column name for Copy Activity to fill with auto generated slice identifier, which is used to clean up data of a specific slice when rerun. Per altre informazioni, vedere la copia ripetibile.For more information, see repeatable copy. Nome di colonna di una colonna con tipo di dati binario (32).Column name of a column with data type of binary(32). N.No
sqlWriterStoredProcedureNamesqlWriterStoredProcedureName Nome della stored procedure che definisce come applicare i dati di origine nella tabella di destinazione, ad esempio per eseguire upsert o trasformazioni usando logica di business personalizzata.Name of the stored procedure that defines how to apply source data into target table, e.g. to do upserts or transform using your own business logic.

Si noti che questa stored procedure verrà richiamata per batch.Note this stored procedure will be invoked per batch. Se si vuole eseguire una sola volta un'operazione che non ha nulla a che fare con i dati di origine, ad esempio un'eliminazione o un troncamento, usare la proprietà sqlWriterCleanupScript.If you want to do operation that only runs once and has nothing to do with source data e.g. delete/truncate, use sqlWriterCleanupScript property.
Nome della stored procedure.Name of the stored procedure. N.No
storedProcedureParametersstoredProcedureParameters Parametri per la stored procedure.Parameters for the stored procedure. Coppie nome/valore.Name/value pairs. I nomi e le maiuscole e minuscole dei parametri devono corrispondere ai nomi e alle maiuscole e minuscole dei parametri della stored procedure.Names and casing of parameters must match the names and casing of the stored procedure parameters. NoNo
sqlWriterTableTypesqlWriterTableType Specificare il nome di un tipo di tabella da usare nella stored procedure.Specify a table type name to be used in the stored procedure. L'attività di copia rende i dati spostati disponibili in una tabella temporanea con questo tipo di tabella.Copy activity makes the data being moved available in a temp table with this table type. Il codice della stored procedure può quindi unire i dati copiati con i dati esistenti.Stored procedure code can then merge the data being copied with existing data. Nome del tipo di tabella.A table type name. NoNo

Esempio SqlSinkSqlSink example

"sink": {
    "type": "SqlSink",
    "writeBatchSize": 1000000,
    "writeBatchTimeout": "00:05:00",
    "sqlWriterStoredProcedureName": "CopyTestStoredProcedureWithParameters",
    "sqlWriterTableType": "CopyTestTableType",
    "storedProcedureParameters": {
        "identifier": { "value": "1", "type": "Int" },
        "stringData": { "value": "str1" },
        "decimalData": { "value": "1", "type": "Decimal" }
    }
}

Esempi JSON per la copia dei dati da e verso un database SQLJSON examples for copying data to and from SQL Database

Gli esempi seguenti forniscono le definizioni JSON di esempio che è possibile usare per creare una pipeline usando Visual Studio oppure Azure PowerShell.The following examples provide sample JSON definitions that you can use to create a pipeline by using Visual Studio or Azure PowerShell. Tali esempi mostrano come copiare dati in e da un database SQL di Azure e un archivio BLOB di Azure.They show how to copy data to and from Azure SQL Database and Azure Blob Storage. Tuttavia, i dati possono essere copiati direttamente da una delle origini in qualsiasi sink dichiarato qui usando l'attività di copia in Data factory di Azure.However, data can be copied directly from any of sources to any of the sinks stated here using the Copy Activity in Azure Data Factory.

Esempio: Copiare dati da un database SQL di Azure SQL in BLOB di AzureExample: Copy data from Azure SQL Database to Azure Blob

L'esempio definisce le entità di Data Factory seguenti:The same defines the following Data Factory entities:

  1. Un servizio collegato di tipo AzureSqlDatabase.A linked service of type AzureSqlDatabase.
  2. Un servizio collegato di tipo AzureStorage.A linked service of type AzureStorage.
  3. Un set di dati di input di tipo AzureSqlTable.An input dataset of type AzureSqlTable.
  4. Un set di dati di output di tipo AzureBlob.An output dataset of type Azure Blob.
  5. Una pipeline con un'attività di copia che usa SqlSource e BlobSink.A pipeline with a Copy activity that uses SqlSource and BlobSink.

L'esempio copia ogni ora i dati di una serie temporale (con frequenza oraria, giornaliera e così via) da una tabella del database SQL di Azure a un BLOB.The sample copies time-series data (hourly, daily, etc.) from a table in Azure SQL database to a blob every hour. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.The JSON properties used in these samples are described in sections following the samples.

Servizio collegato per il database SQL di Azure.Azure SQL Database linked service:

{
  "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"
    }
  }
}

Vedere la sezione sul servizio collegato SQL di Azure per l'elenco delle proprietà supportate da questo servizio collegato.See the Azure SQL Linked Service section for the list of properties supported by this linked service.

Servizio collegato di archiviazione BLOB di Azure:Azure Blob storage linked service:

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

Vedere l'articolo BLOB di Azure per l'elenco delle proprietà supportate da questo servizio collegato.See the Azure Blob article for the list of properties supported by this linked service.

Set di dati di input SQL Azure:Azure SQL input dataset:

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.The sample assumes you have created a table “MyTable” in Azure SQL and it contains a column called “timestampcolumn” for time series data.

L'impostazione di "external" su "true" comunica al servizio Azure Data Factory che il set di dati è esterno alla data factory e non è prodotto da un'attività al suo interno.Setting “external”: ”true” informs the Azure Data Factory service that the dataset is external to the data factory and is not produced by an activity in the data factory.

{
  "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
      }
    }
  }
}

Vedere la sezione sulle proprietà del tipo di set di dati SQL di Azure per l'elenco delle proprietà supportate da questo tipo di set di dati.See the Azure SQL dataset type properties section for the list of properties supported by this dataset type.

Set di dati di output del BLOB di Azure:Azure Blob output dataset:

I dati vengono scritti in un nuovo BLOB ogni ora (frequenza: oraria, intervallo: 1).Data is written to a new blob every hour (frequency: hour, interval: 1). Il percorso della cartella per il BLOB viene valutato dinamicamente in base all'ora di inizio della sezione in fase di elaborazione.The folder path for the blob is dynamically evaluated 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 year, month, day, and hours parts of the start time.

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

Vedere la sezione sulle proprietà del tipo di set di dati BLOB di Azure per l'elenco delle proprietà supportate da questo tipo di set di dati.See the Azure Blob dataset type properties section for the list of properties supported by this dataset type.

Un'attività di copia in una pipeline con un'origine SQL e un sink BLOB:A copy activity in a pipeline with SQL source and Blob sink:

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.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Nella definizione JSON della pipeline, il tipo source è impostato su SqlSource e il tipo sink è impostato su BlobSink.In the pipeline JSON definition, the source type is set to SqlSource and sink type is set to BlobSink. La query SQL specificata per la proprietà SqlReaderQuery consente di selezionare i dati da copiare nell'ultima ora.The SQL query specified for the SqlReaderQuery property selects the data in the past hour to copy.

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

Nell'esempio, la proprietà sqlReaderQuery è specificata per SqlSource.In the example, sqlReaderQuery is specified for the SqlSource. L'attività di copia esegue questa query nell'origine del database SQL di Azure per ottenere i dati.The Copy Activity runs this query against the Azure SQL Database source to get the data. In alternativa, è possibile specificare una stored procedure indicando i parametri sqlReaderStoredProcedureName e storedProcedureParameters (se la stored procedure accetta parametri).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Se non si specifica sqlReaderQuery o sqlReaderStoredProcedureName, le colonne definite nella sezione della struttura del set di dati JSON vengono usate per compilare una query da eseguire sul database SQL di Azure.If you do not specify either sqlReaderQuery or sqlReaderStoredProcedureName, the columns defined in the structure section of the dataset JSON are used to build a query to run against the Azure SQL Database. Ad esempio: select column1, column2 from mytable.For example: select column1, column2 from mytable. Se la definizione del set di dati non dispone della struttura, vengono selezionate tutte le colonne della tabella.If the dataset definition does not have the structure, all columns are selected from the table.

Vedere la sezione SqlSource e BlobSink per l'elenco delle proprietà supportate da SqlSource e BlobSink.See the Sql Source section and BlobSink for the list of properties supported by SqlSource and BlobSink.

Esempio: Copiare dati da BLOB di Azure in un database SQL di AzureExample: Copy data from Azure Blob to Azure SQL Database

L'esempio definisce le entità di Data Factory seguenti:The sample defines the following Data Factory entities:

  1. Un servizio collegato di tipo AzureSqlDatabase.A linked service of type AzureSqlDatabase.
  2. Un servizio collegato di tipo AzureStorage.A linked service of type AzureStorage.
  3. Un set di dati di input di tipo AzureBlob.An input dataset of type AzureBlob.
  4. Un set di dati di output di tipo AzureSqlTable.An output dataset of type AzureSqlTable.
  5. Una pipeline con attività di copia che usa BlobSource e SqlSink.A pipeline with Copy activity that uses BlobSource and SqlSink.

L'esempio copia ogni ora i dati di una serie temporale (con frequenza oraria, giornaliera e così via) da un BLOB di Azure a una tabella del database SQL di Azure.The sample copies time-series data (hourly, daily, etc.) from Azure blob to a table in Azure SQL database every hour. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.The JSON properties used in these samples are described in sections following the samples.

Servizio collegato SQL di Azure:Azure SQL linked service:

{
  "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"
    }
  }
}

Vedere la sezione sul servizio collegato SQL di Azure per l'elenco delle proprietà supportate da questo servizio collegato.See the Azure SQL Linked Service section for the list of properties supported by this linked service.

Servizio collegato di archiviazione BLOB di Azure:Azure Blob storage linked service:

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

Vedere l'articolo BLOB di Azure per l'elenco delle proprietà supportate da questo servizio collegato.See the Azure Blob article for the list of properties supported by this linked service.

Set di dati di input del BLOB di Azure:Azure Blob input dataset:

I dati vengono prelevati da un nuovo BLOB ogni ora (frequenza: oraria, intervallo: 1).Data is picked up from a new blob every hour (frequency: hour, interval: 1). Il percorso della cartella e il nome del file per il BLOB vengono valutati dinamicamente in base all'ora di inizio della sezione in fase di elaborazione.The folder path and file name for the blob are dynamically evaluated based on the start time of the slice that is being processed. Il percorso della cartella usa le parti di anno, mese e giorno della data/ora di inizio e il nome file usa la parte relativa all'ora.The folder path uses year, month, and day part of the start time and file name uses the hour part of the start time. L'impostazione di "external" su "true" comunica al servizio Data Factory che la tabella è esterna alla data factory e non è prodotta da un'attività al suo interno.“external”: “true” setting informs the Data Factory service that this table is external to the data factory and is not produced by an activity in the data factory.

{
  "name": "AzureBlobInput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/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"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "rowDelimiter": "\n"
      }
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

Vedere la sezione sulle proprietà del tipo di set di dati BLOB di Azure per l'elenco delle proprietà supportate da questo tipo di set di dati.See the Azure Blob dataset type properties section for the list of properties supported by this dataset type.

Set di dati di aoutput del database SQL di AzureAzure SQL Database output dataset:

L'esempio copia dati in una tabella denominata "MyTable" in SQL Azure.The sample copies data to a table named “MyTable” in Azure SQL. Creare la tabella nel database SQL di Azure con lo stesso numero di colonne previsto nel file CSV del BLOB.Create the table in Azure SQL with the same number of columns as you expect the Blob CSV file to contain. Alla tabella vengono aggiunte nuove righe ogni ora.New rows are added to the table every hour.

{
  "name": "AzureSqlOutput",
  "properties": {
    "type": "AzureSqlTable",
    "linkedServiceName": "AzureSqlLinkedService",
    "typeProperties": {
      "tableName": "MyOutputTable"
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Vedere la sezione sulle proprietà del tipo di set di dati SQL di Azure per l'elenco delle proprietà supportate da questo tipo di set di dati.See the Azure SQL dataset type properties section for the list of properties supported by this dataset type.

Un'attività di copia in una pipeline con un'origine BLOB e un sink SQL:A copy activity in a pipeline with Blob source and SQL sink:

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.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Nella definizione JSON della pipeline, il tipo di origine è impostato su BlobSource e il tipo sink è impostato su SqlSink.In the pipeline JSON definition, the source type is set to BlobSource and sink type is set to SqlSink.

{
  "name":"SamplePipeline",
  "properties":{
    "start":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline with copy activity",
    "activities":[
      {
        "name": "AzureBlobtoSQL",
        "description": "Copy Activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureBlobInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureSqlOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "BlobSource",
            "blobColumnSeparators": ","
          },
          "sink": {
            "type": "SqlSink"
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

Per l'elenco delle proprietà supportate da SqlSink e BlobSink, vedere la sezione SqlSink e BlobSink.See the Sql Sink section and BlobSource for the list of properties supported by SqlSink and BlobSource.

Colonne Identity nel database di destinazioneIdentity columns in the target database

In questa sezione viene fornito un esempio per la copia di dati da una tabella di origine senza una colonna identity in una tabella di destinazione con una colonna identity.This section provides an example for copying data from a source table without an identity column to a destination table with an identity column.

Tabella di origine:Source table:

create table dbo.SourceTbl
(
    name varchar(100),
    age int
)

Tabella di destinazione:Destination table:

create table dbo.TargetTbl
(
    identifier int identity(1,1),
    name varchar(100),
    age int
)

Si noti che la tabella di destinazione contiene una colonna identity.Notice that the target table has an identity column.

Definizione JSON del set di dati di origineSource dataset JSON definition

{
    "name": "SampleSource",
    "properties": {
        "type": " SqlServerTable",
        "linkedServiceName": "TestIdentitySQL",
        "typeProperties": {
            "tableName": "SourceTbl"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {}
    }
}

Definizione JSON del set di dati di destinazioneDestination dataset JSON definition

{
    "name": "SampleTarget",
    "properties": {
        "structure": [
            { "name": "name" },
            { "name": "age" }
        ],
        "type": "AzureSqlTable",
        "linkedServiceName": "TestIdentitySQLSource",
        "typeProperties": {
            "tableName": "TargetTbl"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": false,
        "policy": {}
    }
}

Si noti che la tabella di origine e la tabella di destinazione hanno schemi diversi (la destinazione include una colonna aggiuntiva identity).Notice that as your source and target table have different schema (target has an additional column with identity). In questo scenario è necessario specificare la proprietà structure nella definizione del set di dati di destinazione che non include la colonna identity.In this scenario, you need to specify structure property in the target dataset definition, which doesn’t include the identity column.

Chiamare una stored procedure da un sink SQLInvoke stored procedure from SQL sink

Per un esempio di come chiamare una stored procedure da un sink SQL in un'attività di copia di una pipeline, vedere l'articolo su come richiamare una stored procedure per il sink SQL nell'attività di copia.For an example of invoking a stored procedure from SQL sink in a copy activity of a pipeline, see Invoke stored procedure for SQL sink in copy activity article.

Mapping dei tipi per il database SQL di AzureType mapping for Azure SQL Database

Come accennato nell'articolo sulle attività di spostamento dei dati , l'attività di copia esegue conversioni automatiche da tipi di origine a tipi di sink con l'approccio seguente in 2 passaggi:As mentioned in the data movement activities article Copy activity performs automatic type conversions from source types to sink types with the following 2-step approach:

  1. Conversione dai tipi di origine nativi al tipo .NETConvert from native source types to .NET type
  2. Conversione dal tipo .NET al tipo di sink nativoConvert from .NET type to native sink type

Quando si spostano dati da e verso il database SQL di Azure vengono usati i mapping seguenti dal tipo SQL al tipo .NET e viceversa.When moving data to and from Azure SQL Database, the following mappings are used from SQL type to .NET type and vice versa. Il mapping è uguale al mapping del tipo di dati di SQL Server per ADO.NET.The mapping is same as the SQL Server Data Type Mapping for ADO.NET.

Tipo di motore di database di SQL ServerSQL Server Database Engine type Tipo di .NET Framework.NET Framework type
bigintbigint Int64Int64
binarybinary Byte[]Byte[]
bitbit BooleanBoolean
charchar String, Char[]String, Char[]
datedate DateTimeDateTime
DatetimeDatetime DateTimeDateTime
datetime2datetime2 DateTimeDateTime
DatetimeoffsetDatetimeoffset DateTimeOffsetDateTimeOffset
DecimalDecimal DecimalDecimal
FILESTREAM attribute (varbinary(max))FILESTREAM attribute (varbinary(max)) Byte[]Byte[]
FloatFloat DoubleDouble
imageimage Byte[]Byte[]
intint Int32Int32
moneymoney DecimalDecimal
ncharnchar String, Char[]String, Char[]
ntextntext String, Char[]String, Char[]
numericnumeric DecimalDecimal
nvarcharnvarchar String, Char[]String, Char[]
realreal SingleSingle
rowversionrowversion Byte[]Byte[]
smalldatetimesmalldatetime DateTimeDateTime
smallintsmallint Int16Int16
smallmoneysmallmoney DecimalDecimal
sql_variantsql_variant Object *Object *
texttext String, Char[]String, Char[]
timetime TimeSpanTimeSpan
timestamptimestamp Byte[]Byte[]
tinyinttinyint ByteByte
uniqueidentifieruniqueidentifier GuidGuid
varbinaryvarbinary Byte[]Byte[]
varcharvarchar String, Char[]String, Char[]
xmlxml XmlXml

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

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.To learn about mapping columns in source dataset to columns in sink dataset, see Mapping dataset columns in Azure Data Factory.

Copia ripetibileRepeatable copy

Quando si copiano dati in un database SQL Server, per impostazione predefinita l'attività di copia accoda i dati alla tabella di sink.When copying data to SQL Server Database, the copy activity appends data to the sink table by default. Per eseguire invece un UPSERT, vedere l'articolo Scrittura ripetibile in SqlSink.To perform an UPSERT instead, See Repeatable write to SqlSink article.

Quando si copiano dati da archivi dati relazionali, è necessario tenere presente la ripetibilità per evitare risultati imprevisti.When copying data from relational data stores, 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 i criteri di ripetizione per un set di dati in modo da rieseguire una sezione in caso di errore.You can also configure retry policy for a dataset so that a slice is rerun when a failure occurs. 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.When a slice is rerun in either way, you need to make sure that the same data is read no matter how many times a slice is run. Vedere Lettura ripetibile da origini relazionali.See Repeatable read from relational sources.

Ottimizzazione delle prestazioniPerformance and Tuning

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.See Copy Activity Performance & Tuning Guide to learn about key factors that impact performance of data movement (Copy Activity) in Azure Data Factory and various ways to optimize it.