Déplacer des données à partir d’une source OData à l’aide d’Azure Data FactoryMove data From an OData source 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 OData dans V2.If you are using the current version of the Data Factory service, see OData connector in V2.

Cet article explique comment utiliser l’activité de copie dans Azure Data Factory pour déplacer des données à partir d’une source OData locale.This article explains how to use the Copy Activity in Azure Data Factory to move data from an OData source. 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.

Vous pouvez copier les données d’une source OData dans tout magasin de données récepteur pris en charge.You can copy data from an OData source to any supported sink data store. Consultez le tableau Magasins de données pris en charge pour obtenir la liste des magasins de données pris en charge en tant que récepteurs par l’activité de copie.For a list of data stores supported as sinks by the copy activity, see the Supported data stores table. Actuellement, Data Factory prend uniquement en charge le déplacement de données d’une source OData vers d’autres magasins de données, mais pas l’inverse.Data factory currently supports only moving data from an OData source to other data stores, but not for moving data from other data stores to an OData source.

Versions et types d’authentification pris en chargeSupported versions and authentication types

Ce connecteur OData prend en charge OData versions 3.0 et 4.0, et vous pouvez copier des données à partir de sources OData cloud et locales.This OData connector support OData version 3.0 and 4.0, and you can copy data from both cloud OData and on-premises OData sources. Dans le second cas, vous devez installer la passerelle de gestion des données.For the latter, you need to install the Data Management Gateway. Pour plus d’informations sur la passerelle de gestion de données, consultez l’article Déplacement de données entre des sources locales et le cloud à l’aide de la passerelle de gestion des données .See Move data between on-premises and cloud article for details about Data Management Gateway.

Les types d’authentification suivants sont pris en charge :Below authentication types are supported:

  • Pour accéder au flux OData cloud, vous pouvez utiliser l’authentification OAuth basée sur Azure Active Directory, anonyme ou de base (nom d’utilisateur et mot de passe).To access cloud OData feed, you can use anonymous, basic (user name and password), or Azure Active Directory based OAuth authentication.
  • Pour accéder au flux OData local, vous pouvez utiliser l’authentification anonyme, de base (nom d’utilisateur et mot de passe) ou Windows.To access on-premises OData feed, you can use anonymous, basic (user name and password), or Windows authentication.

Prise en mainGetting started

Vous pouvez créer un pipeline avec une activité de copie qui déplace les données d’une source OData à l’aide de différents outils/API.You can create a pipeline with a copy activity that moves data from an OData source 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 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.
  2. 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.
  3. 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.

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 un exemple contenant des définitions JSON pour les entités Data Factory servant à copier des données à partir d’une source OData, consultez la section Exemple JSON : copier des données d’une source OData vers Stockage Blob Azure de cet article.For a sample with JSON definitions for Data Factory entities that are used to copy data from an OData source, see JSON example: Copy data from OData source to Azure Blob section of this article.

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

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

Le tableau suivant fournit la description des éléments JSON spécifiques au service lié OData.The following table provides description for JSON elements specific to OData linked service.

PropriétéProperty DescriptionDescription ObligatoireRequired
typetype La propriété type doit être définie sur : ODataThe type property must be set to: OData OUIYes
urlurl URL du service OData.Url of the OData service. OUIYes
authenticationTypeauthenticationType Type d’authentification utilisé pour se connecter à la source OData.Type of authentication used to connect to the OData source.

Pour OData dans le cloud, les valeurs possibles sont Anonyme, De base et OAuth (notez qu’à l’heure actuelle, Azure Data Factory prend en charge uniquement l’authentification OAuth basée sur Azure Active Directory).For cloud OData, possible values are Anonymous, Basic, and OAuth (note Azure Data Factory currently only support Azure Active Directory based OAuth).

Pour OData en local, les valeurs possibles sont Anonyme, De base et Windows.For on-premises OData, possible values are Anonymous, Basic, and Windows.
OUIYes
userNameusername Spécifiez le nom d’utilisateur si vous utilisez l’authentification de base.Specify user name if you are using Basic authentication. Oui (uniquement si vous utilisez l’authentification de base)Yes (only if you are using Basic authentication)
passwordpassword Spécifiez le mot de passe du compte d’utilisateur que vous avez spécifié pour le nom d’utilisateur.Specify password for the user account you specified for the username. Oui (uniquement si vous utilisez l’authentification de base)Yes (only if you are using Basic authentication)
authorizedCredentialauthorizedCredential Si vous utilisez OAuth, cliquez sur le bouton Autoriser de l’Assistant de copie Data Factory ou de l’éditeur et entrez vos informations d’identification. La valeur de cette propriété sera alors générée automatiquement.If you are using OAuth, click Authorize button in the Data Factory Copy Wizard or Editor and enter your credential, then the value of this property will be auto-generated. Oui (uniquement si vous utilisez l’authentification OAuth)Yes (only if you are using OAuth authentication)
gatewayNamegatewayName Nom de la passerelle que le service Data Factory doit utiliser pour se connecter au service OData local.Name of the gateway that the Data Factory service should use to connect to the on-premises OData service. Indiquez uniquement si vous copiez des données à partir d’une source OData locale.Specify only if you are copying data from on premises OData source. NonNo

Utilisation de l’authentification de baseUsing Basic authentication

{
    "name": "inputLinkedService",
    "properties":
    {
        "type": "OData",
        "typeProperties":
        {
            "url": "https://services.odata.org/OData/OData.svc",
            "authenticationType": "Basic",
            "username": "username",
            "password": "password"
        }
    }
}

Utilisation de l’authentification anonymeUsing Anonymous authentication

{
    "name": "ODataLinkedService",
    "properties":
    {
        "type": "OData",
        "typeProperties":
        {
            "url": "https://services.odata.org/OData/OData.svc",
            "authenticationType": "Anonymous"
        }
    }
}

Utilisation de l’authentification Windows pour accéder à la source OData localeUsing Windows authentication accessing on-premises OData source

{
    "name": "inputLinkedService",
    "properties":
    {
        "type": "OData",
        "typeProperties":
        {
            "url": "<endpoint of on-premises OData source e.g. Dynamics CRM>",
            "authenticationType": "Windows",
            "username": "domain\\user",
            "password": "password",
            "gatewayName": "mygateway"
        }
    }
}

Utilisation de l’authentification OAuth pour accéder à la source OData dans le cloudUsing OAuth authentication accessing cloud OData source

{
    "name": "inputLinkedService",
    "properties":
    {
        "type": "OData",
            "typeProperties":
        {
            "url": "<endpoint of cloud OData source e.g. https://<tenant>.crm.dynamics.com/XRMServices/2011/OrganizationData.svc>",
            "authenticationType": "OAuth",
            "authorizedCredential": "<auto generated by clicking the Authorize button on UI>"
        }
    }
}

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

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 du jeu de données de type ODataResource (qui inclut le jeu de données OData) présente les propriétés suivantesThe typeProperties section for dataset of type ODataResource (which includes OData dataset) has the following properties

PropriétéProperty DescriptionDescription ObligatoireRequired
chemin d’accèspath Chemin d'accès à la ressource ODataPath to the OData resource NonNo

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.

En revanche, les propriétés disponibles dans la section typeProperties de l'activité varient pour chaque type d'activité.Properties available in the typeProperties section of the activity on the other hand 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.

Lorsque la source est de type RelationalSource (qui inclut OData), les propriétés suivantes sont disponibles dans la section typeProperties :When source is of type RelationalSource (which includes OData) the following properties are available in typeProperties section:

PropriétéProperty DescriptionDescription ExemplesExample ObligatoireRequired
queryquery Utilise la requête personnalisée pour lire des données.Use the custom query to read data. "?$select=Name, Description&$top=5""?$select=Name, Description&$top=5" NonNo

Mappage de type pour ODataType Mapping for OData

Comme mentionné dans l’article consacré aux activités de déplacement de données , l’activité de copie convertit automatiquement les types source en types récepteur à l’aide de l’approche en deux é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 two-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 de données à partir d’OData, les mappages suivants sont utilisés entre les types OData et le type .NET.When moving data from OData, the following mappings are used from OData types to .NET type.

Type de données ODataOData Data Type Type .NET.NET Type
Edm.BinaryEdm.Binary Byte[]Byte[]
Edm.BooleanEdm.Boolean BoolBool
Edm.ByteEdm.Byte Byte[]Byte[]
Edm.DateTimeEdm.DateTime DateTimeDateTime
Edm.DecimalEdm.Decimal DecimalDecimal
Edm.DoubleEdm.Double DoubleDouble
Edm.SingleEdm.Single SingleSingle
Edm.GuidEdm.Guid GuidGuid
Edm.Int16Edm.Int16 Int16Int16
Edm.Int32Edm.Int32 Int32Int32
Edm.Int64Edm.Int64 Int64Int64
Edm.SByteEdm.SByte Int16Int16
Edm.StringEdm.String StringString
Edm.TimeEdm.Time TimeSpanTimeSpan
Edm.DateTimeOffsetEdm.DateTimeOffset DateTimeOffsetDateTimeOffset

Notes

Les types de données complexes OData, comme Object, ne sont pas pris en charge.OData complex data types e.g. Object are not supported.

Exemple JSON : copier des données d’une source OData vers Stockage Blob AzureJSON example: Copy data from OData source to Azure Blob

Cet exemple présente des exemples de définition JSON que vous pouvez utiliser pour créer un pipeline à l’aide de Visual Studio ou d’Azure PowerShell.This example provides 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 depuis une source OData vers un système Blob Storage Microsoft Azure.They show how to copy data from an OData source to an Azure Blob Storage. Toutefois, les données peuvent être copiées vers l’un des récepteurs indiqués ici , via l’activité de copie d’Azure Data Factory.However, data can be copied to any of the sinks stated here using the Copy Activity in Azure Data Factory. L’exemple contient les entités Data Factory suivantes :The sample has the following Data Factory entities:

  1. Un service lié de type OData.A linked service of type OData.
  2. Un service lié de type AzureStorage.A linked service of type AzureStorage.
  3. Un jeu de données d’entrée de type ODataResource.An input dataset of type ODataResource.
  4. Un jeu de données de sortie de type AzureBlob.An output dataset of type AzureBlob.
  5. Un pipeline avec une activité de copie qui utilise RelationalSource et BlobSink.A pipeline with Copy Activity that uses RelationalSource and BlobSink.

L'exemple copie toutes les heures les données provenant de l’interrogation d'une source OData vers un objet blob Azure.The sample copies data from querying against an OData source to an Azure 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é OData  : cet exemple utilise l’authentification anonyme.OData linked service: This example uses the Anonymous authentication. Consultez la section Service lié OData pour connaître les différents types d’authentification que vous pouvez utiliser.See OData linked service section for different types of authentication you can use.

{
    "name": "ODataLinkedService",
    "properties":
    {
        "type": "OData",
        "typeProperties":
        {
            "url": "https://services.odata.org/OData/OData.svc",
            "authenticationType": "Anonymous"
        }
    }
}

Service lié Azure Storage :Azure Storage linked service:

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

Jeu de données d’entrée OData :OData input dataset:

La définition de « external » : « true» informe le service Data Factory qu’il s’agit d’un jeu de données qui est externe à Data Factory et non produit par une activité dans Data Factory.Setting “external”: ”true” informs the Data Factory service that the dataset is external to the data factory and is not produced by an activity in the data factory.

{
    "name": "ODataDataset",
    "properties":
    {
        "type": "ODataResource",
        "typeProperties":
        {
            "path": "Products"
        },
        "linkedServiceName": "ODataLinkedService",
        "structure": [],
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {
            "retryInterval": "00:01:00",
            "retryTimeout": "00:10:00",
            "maximumRetry": 3
        }
    }
}

La spécification d’un chemin d’accès dans la définition du jeu de données est facultative.Specifying path in the dataset definition is optional.

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": "AzureBlobODataDataSet",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/odata/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "\t"
            },
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                },
                {
                    "name": "Hour",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "HH"
                    }
                }
            ]
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Activité de copie dans un pipeline avec une source OData et un récepteur d’objets blob :Copy activity in a pipeline with OData 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 RelationalSource et le type sink est défini sur BlobSink.In the pipeline JSON definition, the source type is set to RelationalSource and sink type is set to BlobSink. La requête SQL spécifiée pour la propriété query sélectionne les dernières (nouvelles) données de la source OData.The SQL query specified for the query property selects the latest (newest) data from the OData source.

{
    "name": "CopyODataToBlob",
    "properties": {
        "description": "pipeline for copy activity",
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "RelationalSource",
                        "query": "?$select=Name, Description&$top=5",
                    },
                    "sink": {
                        "type": "BlobSink",
                        "writeBatchSize": 0,
                        "writeBatchTimeout": "00:00:00"
                    }
                },
                "inputs": [
                    {
                        "name": "ODataDataSet"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobODataDataSet"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00",
                    "concurrency": 1
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "ODataToBlob"
            }
        ],
        "start": "2017-02-01T18:00:00Z",
        "end": "2017-02-03T19:00:00Z"
    }
}

La spécification de la requête dans la définition du pipeline est facultative.Specifying query in the pipeline definition is optional. L’URL que le service Data Factory utilise pour récupérer les données est : URL spécifiée dans le service lié (obligatoire) + chemin spécifié dans le jeu de données (facultatif) + requête dans le pipeline (facultatif).The URL that the Data Factory service uses to retrieve data is: URL specified in the linked service (required) + path specified in the dataset (optional) + query in the pipeline (optional).

Mappage de type pour ODataType mapping for OData

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

Lorsque que déplacez des données à partir de magasins de données OData, les types de données OData sont mappés aux types .NET.When moving data from OData data stores, OData data types are mapped to .NET types.

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.

Lecture renouvelée de sources relationnellesRepeatable read from relational sources

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.