Copier des données vers et depuis Azure SQL Database en utilisant Azure Data FactoryCopy data to and from Azure SQL Database using Azure Data Factory

Notes

Cet article s’applique à la version 1 de Data Factory.This article applies to version 1 of Data Factory. Si vous utilisez la version actuelle du service Data Factory, consultez Connecteur Azure SQL Database dans V2.If you are using the current version of the Data Factory service, see Azure SQL Database connector in V2.

Cet article explique comment utiliser l’activité de copie dans Azure Data Factory pour déplacer des données vers et depuis Azure SQL Database.This article explains how to use the Copy Activity in Azure Data Factory to move data to and from Azure SQL Database. Il s’appuie sur l’article Activités de déplacement des données, qui présente une vue d’ensemble du déplacement de données avec l’activité de copie.It builds on the Data Movement Activities article, which presents a general overview of data movement with the copy activity.

Scénarios pris en chargeSupported scenarios

Vous pouvez copier des données depuis Azure SQL Database vers les magasins de données suivants :You can copy data from Azure SQL Database to the following data stores:

CatégorieCategory Banque de donnéesData store
AzureAzure stockage d’objets blob AzureAzure Blob storage
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure SQL DatabaseAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Index Recherche AzureAzure Search Index
Stockage Table AzureAzure Table storage
Bases de donnéesDatabases SQL ServerSQL Server
OracleOracle
FichierFile Système de fichiersFile system

Vous pouvez copier des données depuis les magasins de données suivants vers Azure SQL Database :You can copy data from the following data stores to Azure SQL Database:

CatégorieCategory Banque de donnéesData store
AzureAzure stockage d’objets blob AzureAzure Blob storage
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure SQL DatabaseAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Stockage Table AzureAzure Table storage
Bases de donnéesDatabases Amazon RedshiftAmazon Redshift
DB2DB2
MySQLMySQL
OracleOracle
PostgreSQLPostgreSQL
SAP Business WarehouseSAP Business Warehouse
SAP HANASAP HANA
SQL ServerSQL Server
SybaseSybase
TeradataTeradata
NosqlNoSQL CassandraCassandra
MongoDBMongoDB
FichierFile Amazon S3Amazon S3
Système de fichiersFile system
FTPFTP
HDFSHDFS
SFTPSFTP
AutresOthers HTTP génériqueGeneric HTTP
OData génériqueGeneric OData
ODBC génériqueGeneric ODBC
SalesforceSalesforce
Table web (table HTML)Web table (table from HTML)

Type d’authentification pris en chargeSupported authentication type

Le connecteur Azure SQL Database prend en charge l’authentification de base.Azure SQL Database connector supports basic authentication.

Prise en mainGetting started

Vous pouvez créer un pipeline avec une activité de copie qui déplace les données vers/depuis Azure SQL Database à l’aide de différents outils/API.You can create a pipeline with a copy activity that moves data to/from an Azure SQL Database by using different tools/APIs.

Le moyen le plus simple de créer un pipeline consiste à utiliser l’Assistant Copie.The easiest way to create a pipeline is to use the Copy Wizard. Consultez le tutoriel : Créer un pipeline avec l’activité de copie à l’aide de l’Assistant Copie pour obtenir une procédure pas à pas rapide sur la création d’un pipeline à l’aide de l’Assistant Copie de données.See Tutorial: Create a pipeline using Copy Wizard for a quick walkthrough on creating a pipeline using the Copy data wizard.

Vous pouvez également utiliser les outils suivants pour créer un pipeline : Visual Studio, Azure PowerShell, modèle Azure Resource Manager, .NET API et 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. Pour obtenir des instructions détaillées sur la création d’un pipeline avec une activité de copie, consultez le didacticiel sur l’activité de copie.See Copy activity tutorial for step-by-step instructions to create a pipeline with a copy activity.

Que vous utilisiez des outils ou des API, la création d’un pipeline qui déplace les données d’un magasin de données source vers un magasin de données récepteur implique les étapes suivantes :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. Création d'une fabrique de données.Create a data factory. Une fabrique de données peut contenir un ou plusieurs pipelines.A data factory may contain one or more pipelines.
  2. Création de services liés pour lier les magasins de données d’entrée et de sortie à votre fabrique de données.Create linked services to link input and output data stores to your data factory. Par exemple, si vous copiez des données depuis un stockage d’objets blob Azure vers une base de données Azure SQL, vous créez deux services liés pour lier votre compte de stockage Azure et votre base de données Azure SQL à votre fabrique de données.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. Pour les propriétés du service lié qui sont spécifiques à Azure SQL Database, consultez la section propriétés du service lié.For linked service properties that are specific to Azure SQL Database, see linked service properties section.
  3. Création de jeux de données pour représenter les données d’entrée et de sortie de l’opération de copie.Create datasets to represent input and output data for the copy operation. Dans l’exemple mentionné dans la dernière étape, vous créez un jeu de données pour spécifier le conteneur d’objets blob et le dossier qui contient les données d’entrée.In the example mentioned in the last step, you create a dataset to specify the blob container and folder that contains the input data. Ensuite, vous créez un autre jeu de données pour spécifier la table SQL dans la base de données Azure SQL qui contient les données copiées à partir du stockage 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. Pour les propriétés du jeu de données qui sont spécifiques à Azure Data Lake Store, consultez la section propriétés du jeu de données.For dataset properties that are specific to Azure Data Lake Store, see dataset properties section.
  4. Création d’un pipeline avec une activité de copie qui utilise un jeu de données en tant qu’entrée et un jeu de données en tant que sortie.Create a pipeline with a copy activity that takes a dataset as an input and a dataset as an output. Dans l’exemple mentionné plus haut, vous utilisez BlobSource comme source et SqlSink comme récepteur pour l’activité de copie.In the example mentioned earlier, you use BlobSource as a source and SqlSink as a sink for the copy activity. De même, si vous copiez depuis Azure SQL Database vers Stockage Blob Azure, vous utilisez SqlSource et BlobSink dans l’activité de copie.Similarly, if you are copying from Azure SQL Database to Azure Blob Storage, you use SqlSource and BlobSink in the copy activity. Pour les propriétés d’activité de copie qui sont spécifiques à Azure SQL Database, consultez la section propriétés de l’activité de copie.For copy activity properties that are specific to Azure SQL Database, see copy activity properties section. Pour plus d’informations sur l’utilisation d’un magasin de données comme source ou comme récepteur, cliquez sur le lien dans la section précédente pour votre magasin de données.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.

Lorsque vous utilisez l’Assistant, les définitions JSON de ces entités Data Factory (services liés, jeux de données et pipeline) sont automatiquement créées pour vous.When you use the wizard, JSON definitions for these Data Factory entities (linked services, datasets, and the pipeline) are automatically created for you. Lorsque vous utilisez des outils/API (à l’exception de l’API .NET), vous devez définir ces entités Data Factory au format JSON.When you use tools/APIs (except .NET API), you define these Data Factory entities by using the JSON format. Pour obtenir des exemples comportant des définitions JSON pour les entités Data Factory utilisées pour copier les données vers ou à partir d’Azure SQL Database, consultez la section Exemples JSON de cet article.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.

Les sections suivantes offrent des informations détaillées sur les propriétés JSON utilisées pour définir les entités Data Factory propres à Azure SQL Database :The following sections provide details about JSON properties that are used to define Data Factory entities specific to Azure SQL Database:

Propriétés du service liéLinked service properties

Un service lié Azure SQL lie une base de données Azure SQL à votre fabrique de données.An Azure SQL linked service links an Azure SQL database to your data factory. Le tableau suivant fournit la description des éléments JSON spécifiques au service lié SQL Azure.The following table provides description for JSON elements specific to Azure SQL linked service.

PropriétéProperty DescriptionDescription ObligatoireRequired
typetype La propriété type doit être définie sur : AzureSqlDatabaseThe type property must be set to: AzureSqlDatabase OUIYes
connectionStringconnectionString Spécifier les informations requises pour la connexion à l’instance Azure SQL Database pour la propriété connectionString.Specify information needed to connect to the Azure SQL Database instance for the connectionString property. Seule l’authentification de base est prise en charge.Only basic authentication is supported. OUIYes

Important

Configurez le pare-feu Azure SQL Database et le serveur de base de données pour autoriser les services Azure à accéder au serveur.Configure Azure SQL Database Firewall the database server to allow Azure Services to access the server. En outre, si vous copiez des données vers Azure SQL Database à partir d’un emplacement situé en dehors d’Azure, y compris à partir de sources de données locales avec la passerelle de la fabrique de données, configurez la plage d’adresses IP appropriée pour l’ordinateur qui envoie des données à Azure SQL Database.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.

Propriétés du jeu de donnéesDataset properties

Pour spécifier un jeu de données afin de représenter les données d’entrée ou de sortie dans une base de données Azure SQL, vous devez définir la propriété de type du jeu de données sur : 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. Définissez la propriété linkedServiceName du jeu de données sur le nom du service lié Azure SQL.Set the linkedServiceName property of the dataset to the name of the Azure SQL linked service.

Pour obtenir une liste complète des sections et propriétés disponibles pour la définition de jeux de données, consultez l’article Création de jeux de données.For a full list of sections & properties available for defining datasets, see the Creating datasets article. Les sections comme la structure, la disponibilité et la stratégie d'un jeu de données JSON sont similaires pour tous les types de jeux de données (SQL Azure, Azure Blob, Azure Table, etc.).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 section typeProperties est différente pour chaque type de jeu de données et fournit des informations sur l'emplacement des données dans le magasin de données.The typeProperties section is different for each type of dataset and provides information about the location of the data in the data store. La section typeProperties pour le jeu de données de type AzureSqlTable a les propriétés suivantes :The typeProperties section for the dataset of type AzureSqlTable has the following properties:

PropriétéProperty DescriptionDescription ObligatoireRequired
tableNametableName Nom de la table ou de la vue dans l’instance Azure SQL Database à laquelle le service lié fait référence.Name of the table or view in the Azure SQL Database instance that linked service refers to. OUIYes

Propriétés de l’activité de copieCopy activity properties

Pour obtenir la liste complète des sections et des propriétés disponibles pour la définition des activités, consultez l’article Création de pipelines.For a full list of sections & properties available for defining activities, see the Creating Pipelines article. Les propriétés comme le nom, la description, les tables d’entrée et de sortie et la stratégie sont disponibles pour tous les types d’activités.Properties such as name, description, input and output tables, and policy are available for all types of activities.

Notes

L'activité de copie accepte uniquement une entrée et produit une seule sortie.The Copy Activity takes only one input and produces only one output.

En revanche, les propriétés disponibles dans la section typeProperties de l’activité varient pour chaque type d’activité.Whereas, properties available in the typeProperties section of the activity vary with each activity type. Pour l’activité de copie, elles dépendent des types de sources et récepteurs.For Copy activity, they vary depending on the types of sources and sinks.

Si vous déplacez des données à partir d’une base de données Azure SQL, vous définissez le type de source dans l’activité de copie sur SqlSource.If you are moving data from an Azure SQL database, you set the source type in the copy activity to SqlSource. De même, si vous déplacez des données vers une base de données Azure SQL, vous définissez le type de récepteur dans l’activité de copie sur SqlSink.Similarly, if you are moving data to an Azure SQL database, you set the sink type in the copy activity to SqlSink. Cette section fournit une liste de propriétés prises en charge par SqlSource et SqlSink.This section provides a list of properties supported by SqlSource and SqlSink.

SqlSourceSqlSource

Dans le cas d’une activité de copie, quand la source est de type SqlSource, les propriétés suivantes sont disponibles dans la section typeProperties :In copy activity, when the source is of type SqlSource, the following properties are available in typeProperties section:

PropriétéProperty DescriptionDescription Valeurs autoriséesAllowed values ObligatoireRequired
sqlReaderQuerysqlReaderQuery Utilise la requête personnalisée pour lire des données.Use the custom query to read data. Chaîne de requête SQL.SQL query string. Exemple : select * from MyTable.Example: select * from MyTable. NonNo
sqlReaderStoredProcedureNamesqlReaderStoredProcedureName Nom de la procédure stockée qui lit les données de la table source.Name of the stored procedure that reads data from the source table. Nom de la procédure stockée.Name of the stored procedure. La dernière instruction SQL doit être une instruction SELECT dans la procédure stockée.The last SQL statement must be a SELECT statement in the stored procedure. NonNo
storedProcedureParametersstoredProcedureParameters Paramètres de la procédure stockée.Parameters for the stored procedure. Paires nom/valeur.Name/value pairs. Les noms et la casse des paramètres doivent correspondre aux noms et à la casse des paramètres de la procédure stockée.Names and casing of parameters must match the names and casing of the stored procedure parameters. NonNo

Si sqlReaderQuery est spécifié pour SqlSource, l'activité de copie exécute cette requête sur la source Azure SQL Database pour obtenir les données.If the sqlReaderQuery is specified for the SqlSource, the Copy Activity runs this query against the Azure SQL Database source to get the data. Vous pouvez également spécifier une procédure stockée en indiquant sqlReaderStoredProcedureName et storedProcedureParameters (si la procédure stockée accepte des paramètres).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Si vous ne spécifiez pas sqlReaderQuery ou sqlReaderStoredProcedureName, les colonnes définies dans la section Structure du jeu de données JSON sont utilisées pour créer une requête (select column1, column2 from mytable) à exécuter sur la base de données Azure SQL.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. Si la définition du jeu de données ne possède pas de structure, toutes les colonnes de la table sont sélectionnées.If the dataset definition does not have the structure, all columns are selected from the table.

Notes

Quand vous utilisez sqlReaderStoredProcedureName, vous devez toujours spécifier une valeur pour la propriété tableName du code JSON du jeu de données.When you use sqlReaderStoredProcedureName, you still need to specify a value for the tableName property in the dataset JSON. Cependant, il n’existe aucune validation effectuée pour cette table.There are no validations performed against this table though.

Exemple SqlSourceSqlSource example

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

Définition de la procédure stockée :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 prend en charge les propriétés suivantes :SqlSink supports the following properties:

PropriétéProperty DescriptionDescription Valeurs autoriséesAllowed values ObligatoireRequired
writeBatchTimeoutwriteBatchTimeout Temps d’attente pour que l’opération d’insertion de lot soit terminée avant d’expirer.Wait time for the batch insert operation to complete before it times out. intervalle de tempstimespan

Exemple : “00:30:00” (30 minutes).Example: “00:30:00” (30 minutes).
NonNo
writeBatchSizewriteBatchSize Insère des données dans la table SQL lorsque la taille du tampon atteint writeBatchSizeInserts data into the SQL table when the buffer size reaches writeBatchSize. Nombre entier (nombre de lignes)Integer (number of rows) Non (valeur par défaut : 10000)No (default: 10000)
sqlWriterCleanupScriptsqlWriterCleanupScript Spécifiez une requête pour exécuter l’activité de copie afin que les données d’un segment spécifique soient nettoyées.Specify a query for Copy Activity to execute such that data of a specific slice is cleaned up. Pour en savoir plus, voir Copie renouvelée.For more information, see repeatable copy. Une instruction de requête.A query statement. NonNo
sliceIdentifierColumnNamesliceIdentifierColumnName Spécifiez le nom de la colonne que l’activité de copie doit remplir avec l’identificateur de segment généré automatiquement, qui est utilisé pour nettoyer les données d’un segment spécifique lors de la ré-exécution.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. Pour en savoir plus, voir Copie renouvelée.For more information, see repeatable copy. Nom d’une colonne avec le type de données binary(32).Column name of a column with data type of binary(32). NonNo
sqlWriterStoredProcedureNamesqlWriterStoredProcedureName Nom de la procédure stockée qui définit comment appliquer les données sources dans la table cible, par exemple pour effectuer des upserts ou des transformations à l’aide de votre propre logique métier.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.

Notez que cette procédure stockée sera appelée par lot.Note this stored procedure will be invoked per batch. Si vous souhaitez effectuer une opération qui ne s’exécute qu’une seule fois et n’a rien à faire avec les données sources, par exemple supprimer/tronquer, utilisez la propriété 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.
Nom de la procédure stockée.Name of the stored procedure. NonNo
storedProcedureParametersstoredProcedureParameters Paramètres de la procédure stockée.Parameters for the stored procedure. Paires nom/valeur.Name/value pairs. Les noms et la casse des paramètres doivent correspondre aux noms et à la casse des paramètres de la procédure stockée.Names and casing of parameters must match the names and casing of the stored procedure parameters. NonNo
sqlWriterTableTypesqlWriterTableType Spécifiez le nom du type de table à utiliser dans la procédure stockée.Specify a table type name to be used in the stored procedure. L’activité de copie place les données déplacées disponibles dans une table temporaire avec ce type de table.Copy activity makes the data being moved available in a temp table with this table type. Le code de procédure stockée peut ensuite fusionner les données copiées avec les données existantes.Stored procedure code can then merge the data being copied with existing data. Nom de type de table.A table type name. NonNo

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

Exemples JSON pour copier des données vers et depuis SQL DatabaseJSON examples for copying data to and from SQL Database

Les exemples suivants présentent des exemples de définitions JSON que vous pouvez utiliser pour créer un pipeline à l’aide de Visual Studio ou d’Azure PowerShell.The following examples provide sample JSON definitions that you can use to create a pipeline by using Visual Studio or Azure PowerShell. Ils indiquent comment copier des données vers et depuis une base de données Azure SQL et Azure Blob Storage.They show how to copy data to and from Azure SQL Database and Azure Blob Storage. Toutefois, les données peuvent être copiées directement vers l’un des récepteurs indiqués ici , via l’activité de copie de Microsoft Azure Data Factory.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.

Exemple : copier des données d’Azure SQL Database vers Stockage Blob AzureExample: Copy data from Azure SQL Database to Azure Blob

L’exemple définit les entités de fabrique de données suivantes :The same defines the following Data Factory entities:

  1. Un service lié de type AzureSqlDatabase.A linked service of type AzureSqlDatabase.
  2. Un service lié de type AzureStorage.A linked service of type AzureStorage.
  3. Un jeu de données d'entrée de type AzureSqlTable.An input dataset of type AzureSqlTable.
  4. Un jeu de données de sortie de type Azure Blob.An output dataset of type Azure Blob.
  5. Un pipeline avec une activité de copie qui utilise SqlSource et BlobSink.A pipeline with a Copy activity that uses SqlSource and BlobSink.

L’exemple copie toutes les heures les données temporelles (horaire, journalière, etc.) d’une table d’une base de données Azure SQL vers un objet blob.The sample copies time-series data (hourly, daily, etc.) from a table in Azure SQL database to a blob every hour. Les propriétés JSON utilisées dans ces exemples sont décrites dans les sections suivant les exemples.The JSON properties used in these samples are described in sections following the samples.

Service lié Azure SQL Database :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"
    }
  }
}

Consultez la section Service lié SQL Azure pour obtenir la liste des propriétés prises en charge par ce service lié.See the Azure SQL Linked Service section for the list of properties supported by this linked service.

Service lié Azure Blob Storage :Azure Blob storage linked service:

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

Consultez l’article Objets blob Azure pour obtenir la liste des propriétés prises en charge par ce service lié.See the Azure Blob article for the list of properties supported by this linked service.

Jeu de données d'entrée SQL Azure :Azure SQL input dataset:

L'exemple suppose que vous avez créé une table « MyTable » dans SQL Azure et qu'elle contient une colonne appelée « timestampcolumn » pour les données de série chronologique.The sample assumes you have created a table “MyTable” in Azure SQL and it contains a column called “timestampcolumn” for time series data.

La définition de « external » : « true» informe le service Azure Data Factory que le jeu de données est externe à la fabrique de données et n’est pas produit par une activité dans la fabrique de données.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
      }
    }
  }
}

Consultez la section Propriétés de type du jeu de données SQL Azure pour obtenir la liste des propriétés prises en charge par ce type de jeu de données.See the Azure SQL dataset type properties section for the list of properties supported by this dataset type.

Jeu de données de sortie d'objet Blob Azure :Azure Blob output dataset:

Les données sont écrites dans un nouvel objet blob toutes les heures (fréquence : heure, intervalle : 1).Data is written to a new blob every hour (frequency: hour, interval: 1). Le chemin d’accès du dossier pour l’objet blob est évalué dynamiquement en fonction de l’heure de début du segment en cours de traitement.The folder path for the blob is dynamically evaluated based on the start time of the slice that is being processed. Le chemin d'accès du dossier utilise l'année, le mois, le jour et l'heure de l'heure de début.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
    }
  }
}

Consultez la section Propriétés de type du jeu de données d’objets blob Azure pour obtenir la liste des propriétés prises en charge par ce type de jeu de données.See the Azure Blob dataset type properties section for the list of properties supported by this dataset type.

Activité de copie dans un pipeline avec une source SQL et un récepteur blob :A copy activity in a pipeline with SQL source and Blob sink:

Le pipeline contient une activité de copie qui est configurée pour utiliser les jeux de données d'entrée et de sortie, et qui est planifiée pour s'exécuter toutes les heures.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Dans la définition du pipeline JSON, le type source est défini sur SqlSource et le type sink est défini sur BlobSink.In the pipeline JSON definition, the source type is set to SqlSource and sink type is set to BlobSink. La requête SQL spécifiée pour la propriété SqlReaderQuery sélectionne les données de la dernière heure à copier.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"
        }
      }
    ]
  }
}

Dans l’exemple, sqlReaderQuery est spécifié pour SqlSource.In the example, sqlReaderQuery is specified for the SqlSource. L'activité de copie exécute cette requête sur la source Azure SQL Database pour obtenir les données.The Copy Activity runs this query against the Azure SQL Database source to get the data. Vous pouvez également spécifier une procédure stockée en indiquant sqlReaderStoredProcedureName et storedProcedureParameters (si la procédure stockée accepte des paramètres).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Si vous ne spécifiez pas sqlReaderQuery ou sqlReaderStoredProcedureName, les colonnes définies dans la section Structure du jeu de données JSON sont utilisées pour créer une requête à exécuter sur Azure SQL Database.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. Par exemple : select column1, column2 from mytable.For example: select column1, column2 from mytable. Si la définition du jeu de données ne possède pas de structure, toutes les colonnes de la table sont sélectionnées.If the dataset definition does not have the structure, all columns are selected from the table.

Consultez la section Sql Source et BlobSink pour obtenir la liste des propriétés prises en charge par SqlSource et BlobSink.See the Sql Source section and BlobSink for the list of properties supported by SqlSource and BlobSink.

Exemple : copier des données de Stockage Blob Azure vers Azure SQL DatabaseExample: Copy data from Azure Blob to Azure SQL Database

L’exemple définit les entités Data Factory suivantes :The sample defines the following Data Factory entities:

  1. Un service lié de type AzureSqlDatabase.A linked service of type AzureSqlDatabase.
  2. Un service lié de type AzureStorage.A linked service of type AzureStorage.
  3. Un jeu de données d'entrée de type AzureBlob.An input dataset of type AzureBlob.
  4. Un jeu de données de sortie de type AzureSqlTable.An output dataset of type AzureSqlTable.
  5. Un pipeline avec une activité de copie qui utilise BlobSource et SqlSink.A pipeline with Copy activity that uses BlobSource and SqlSink.

L’exemple copie toutes les heures les données temporelles (horaire, journalière, etc.) d’un objet blob Azure vers une table d’une base de données Azure SQL.The sample copies time-series data (hourly, daily, etc.) from Azure blob to a table in Azure SQL database every hour. Les propriétés JSON utilisées dans ces exemples sont décrites dans les sections suivant les exemples.The JSON properties used in these samples are described in sections following the samples.

Service lié SQL 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"
    }
  }
}

Consultez la section Service lié SQL Azure pour obtenir la liste des propriétés prises en charge par ce service lié.See the Azure SQL Linked Service section for the list of properties supported by this linked service.

Service lié Azure Blob Storage :Azure Blob storage linked service:

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

Consultez l’article Objets blob Azure pour obtenir la liste des propriétés prises en charge par ce service lié.See the Azure Blob article for the list of properties supported by this linked service.

Jeu de données d'entrée d'objet Blob Azure :Azure Blob input dataset:

Les données sont récupérées à partir d’un nouvel objet blob toutes les heures (fréquence : heure, intervalle : 1).Data is picked up from a new blob every hour (frequency: hour, interval: 1). Le nom du chemin d'accès et du fichier de dossier pour l'objet blob sont évalués dynamiquement en fonction de l'heure de début du segment en cours de traitement.The folder path and file name for the blob are dynamically evaluated based on the start time of the slice that is being processed. Le chemin d’accès du dossier utilise l’année, le mois et le jour de début et le nom de fichier utilise l’heure de début.The folder path uses year, month, and day part of the start time and file name uses the hour part of the start time. Le paramètre « external » : « true » informe le service Data Factory que cette table est externe à la fabrique de données et n’est pas produite par une activité dans la fabrique de données.“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
      }
    }
  }
}

Consultez la section Propriétés de type du jeu de données d’objets blob Azure pour obtenir la liste des propriétés prises en charge par ce type de jeu de données.See the Azure Blob dataset type properties section for the list of properties supported by this dataset type.

Jeu de données de sortie Azure SQL Database :Azure SQL Database output dataset:

L'exemple copie les données dans une table nommée « MyTable » dans SQL Azure.The sample copies data to a table named “MyTable” in Azure SQL. Créez la table dans SQL Azure avec le même nombre de colonnes que le fichier CSV d’objets blob doit en contenir.Create the table in Azure SQL with the same number of columns as you expect the Blob CSV file to contain. De nouvelles lignes sont ajoutées à la table toutes les heures.New rows are added to the table every hour.

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

Consultez la section Propriétés de type du jeu de données SQL Azure pour obtenir la liste des propriétés prises en charge par ce type de jeu de données.See the Azure SQL dataset type properties section for the list of properties supported by this dataset type.

Activité de copie dans un pipeline avec une source blob et un récepteur SQL :A copy activity in a pipeline with Blob source and SQL sink:

Le pipeline contient une activité de copie qui est configurée pour utiliser les jeux de données d'entrée et de sortie, et qui est planifiée pour s'exécuter toutes les heures.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Dans la définition du pipeline JSON, le type source est défini sur BlobSource et le type sink est défini sur 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"
        }
      }
    ]
  }
}

Consultez la section Sql Sink et BlobSource pour obtenir la liste des propriétés prises en charge par SqlSink et BlobSource.See the Sql Sink section and BlobSource for the list of properties supported by SqlSink and BlobSource.

Colonnes d’identité dans la base de données cibleIdentity columns in the target database

Cette section fournit un exemple pour copier des données d’une table source sans colonne d’identité vers une table de destination avec une colonne d’identité.This section provides an example for copying data from a source table without an identity column to a destination table with an identity column.

Table source :Source table:

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

Table de destination :Destination table:

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

Notez que la table cible possède une colonne d’identité.Notice that the target table has an identity column.

Définition du jeu de données JSON sourceSource dataset JSON definition

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

Définition de jeu de données JSON de destinationDestination 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": {}
    }
}

Notez que vos tables source et cible ont des schémas différents (la cible possède une colonne supplémentaire avec identité).Notice that as your source and target table have different schema (target has an additional column with identity). Dans ce scénario, vous devez spécifier la propriété structure dans la définition du jeu de données cible, qui n’inclut pas la colonne d’identité.In this scenario, you need to specify structure property in the target dataset definition, which doesn’t include the identity column.

Appel d’une procédure stockée pour un récepteur SQLInvoke stored procedure from SQL sink

Pour obtenir un exemple d’appel d’une procédure stockée à partir d’un récepteur SQL dans l’activité de copie d’un pipeline, consultez l’article Appeler une procédure stockée pour un récepteur SQL dans l’activité de copie.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.

Mappage de type pour Azure SQL DatabaseType mapping for Azure SQL Database

Comme mentionné dans l’article consacré aux activités de déplacement des données , l’activité de copie convertit automatiquement les types source en types récepteur à l’aide de l’approche en 2 étapes suivante :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. Conversion de types natifs source en types .NETConvert from native source types to .NET type
  2. Conversion à partir du type .NET en type de récepteur natifConvert from .NET type to native sink type

Lors du déplacement des données vers et à partir d’Azure SQL Database, les mappages suivants sont utilisés depuis le type SQL vers le type .NET, et vice-versa.When moving data to and from Azure SQL Database, the following mappings are used from SQL type to .NET type and vice versa. Le mappage est identique au mappage du type de données SQL Server pour ADO.NET.The mapping is same as the SQL Server Data Type Mapping for ADO.NET.

Type de moteur de base de données SQL ServerSQL Server Database Engine type Type de .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

Mapper les colonnes source aux colonnes du récepteurMap source to sink columns

Pour en savoir plus sur le mappage de colonnes du jeu de données source à des colonnes du jeu de données récepteur, voir Mappage des colonnes d’un jeu de données dans Azure Data Factory.To learn about mapping columns in source dataset to columns in sink dataset, see Mapping dataset columns in Azure Data Factory.

Copie renouveléeRepeatable copy

Lors de la copie de données sur une base de données SQL Server, l’activité de copie ajoute des données à la table de récepteur par défaut.When copying data to SQL Server Database, the copy activity appends data to the sink table by default. Pour effectuer une opération UPSERT à la place, consultez l’article Écriture renouvelée sur SqlSink.To perform an UPSERT instead, See Repeatable write to SqlSink article.

Lorsque vous copiez des données à partir de magasins de données relationnels, gardez à l’esprit la répétabilité de l’opération, afin d’éviter des résultats imprévus.When copying data from relational data stores, keep repeatability in mind to avoid unintended outcomes. Dans Azure Data Factory, vous pouvez réexécuter une tranche manuellement.In Azure Data Factory, you can rerun a slice manually. Vous pouvez également configurer une stratégie de nouvelles tentatives pour un jeu de données, afin qu’une tranche soit réexécutée en cas de défaillance.You can also configure retry policy for a dataset so that a slice is rerun when a failure occurs. Lorsqu’une tranche est réexécutée d’une manière ou d’une autre, vous devez vous assurer que les mêmes données sont lues et ce, quel que soit le nombre d’exécutions de la tranche.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. Voir Lecture renouvelée de sources relationnelles.See Repeatable read from relational sources.

Performances et réglagePerformance and Tuning

Consultez l’article Guide sur les performances et le réglage de l’activité de copie pour en savoir plus sur les facteurs clés affectant les performances de déplacement des données (activité de copie) dans Azure Data Factory et les différentes manières de les optimiser.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.