Mapper des colonnes d’un jeu de données source sur des colonnes d’un jeu de données de destinationMap source dataset columns to destination dataset columns

Notes

Cet article s’applique à la version 1 de Data Factory.This article applies to version 1 of Data Factory.

Le mappage de colonnes peut être utilisé pour spécifier la façon dont les colonnes spécifiées dans la « structure » de la table source sont mappées vers les colonnes spécifiées dans la « structure » de la table du récepteur.Column mapping can be used to specify how columns specified in the “structure” of source table map to columns specified in the “structure” of sink table. La propriété columnMapping est disponible dans la section typeProperties de l’activité de copie.The columnMapping property is available in the typeProperties section of the Copy activity.

Le mappage de colonnes prend en charge les scénarios suivants :Column mapping supports the following scenarios:

  • Toutes les colonnes de la structure du jeu de données source sont mappées sur toutes les colonnes de la structure du jeu de données récepteur.All columns in the source dataset structure are mapped to all columns in the sink dataset structure.
  • Un sous-ensemble des colonnes de la structure du jeu de données source est mappé sur toutes les colonnes de la structure du jeu de données récepteur.A subset of the columns in the source dataset structure is mapped to all columns in the sink dataset structure.

Voici une liste de conditions d’erreur qui entraînent la levée d’une exception :The following are error conditions that result in an exception:

  • La « structure » de la table du récepteur contient un nombre de colonnes inférieur ou supérieur à celui spécifié par le mappage de colonnes.Either fewer columns or more columns in the “structure” of sink table than specified in the mapping.
  • Mappage en double.Duplicate mapping.
  • Le résultat de la requête SQL ne comprend pas de nom de colonne qui soit spécifié dans le mappage.SQL query result does not have a column name that is specified in the mapping.

Notes

Les exemples suivants concernent SQL Azure et les objets blob Azure, mais sont applicables à tout magasin de données prenant en charge les jeux de données rectangulaires.The following samples are for Azure SQL and Azure Blob but are applicable to any data store that supports rectangular datasets. Ajustez les définitions du jeu de données et du service lié dans les exemples de sorte qu’elles pointent vers les données de la source de données appropriée.Adjust dataset and linked service definitions in examples to point to data in the relevant data source.

Exemple 1 : mappage de colonnes depuis SQL Azure vers un objet blob AzureSample 1 – column mapping from Azure SQL to Azure blob

Dans cet exemple, la table d’entrée possède une structure et pointe vers une table SQL comprise dans une base de données Azure SQL.In this sample, the input table has a structure and it points to a SQL table in an Azure SQL database.

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

Dans cet exemple, la table de sortie possède une structure et pointe vers un objet blob compris dans un stockage d’objets blob Azure.In this sample, the output table has a structure and it points to a blob in an Azure blob storage.

{
    "name": "AzureBlobOutput",
    "properties":
    {
         "structure": 
          [
                { "name": "myuserid"},
                { "name": "myname" },
                { "name": "mygroup"}
          ],
        "type": "AzureBlob",
        "linkedServiceName": "StorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/myfolder",
            "fileName":"myfile.csv",
            "format":
            {
                "type": "TextFormat",
                "columnDelimiter": ","
            }
        },
        "availability":
        {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Le JSON suivant définit une activité de copie dans un pipeline.The following JSON defines a copy activity in a pipeline. Les colonnes de la source sont mappées sur les colonnes du récepteur (columnMappings) à l’aide de la propriété Translator.The columns from source mapped to columns in sink (columnMappings) by using the Translator property.

{
    "name": "CopyActivity",
    "description": "description", 
    "type": "Copy",
    "inputs":  [ { "name": "AzureSQLInput"  } ],
    "outputs":  [ { "name": "AzureBlobOutput" } ],
    "typeProperties":    {
        "source":
        {
            "type": "SqlSource"
        },
        "sink":
        {
            "type": "BlobSink"
        },
        "translator": 
        {
            "type": "TabularTranslator",
            "ColumnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName"
        }
    },
   "scheduler": {
          "frequency": "Hour",
          "interval": 1
        }
}

Flux du mappage de colonnes :Column mapping flow:

Flux du mappage de colonnes

Exemple 2 : mappage de colonnes à l’aide d’une requête SQL depuis SQL Azure vers un objet blob AzureSample 2 – column mapping with SQL query from Azure SQL to Azure blob

Dans cet exemple, une requête SQL est utilisée pour extraire des données de SQL Azure au lieu de simplement spécifier le nom de la table et le nom des colonnes dans la section « structure ».In this sample, a SQL query is used to extract data from Azure SQL instead of simply specifying the table name and the column names in “structure” section.

{
    "name": "CopyActivity",
    "description": "description", 
    "type": "CopyActivity",
    "inputs":  [ { "name": " AzureSQLInput"  } ],
    "outputs":  [ { "name": " AzureBlobOutput" } ],
    "typeProperties":
    {
        "source":
        {
            "type": "SqlSource",
            "SqlReaderQuery": "$$Text.Format('SELECT * FROM MyTable WHERE StartDateTime = \\'{0:yyyyMMdd-HH}\\'', WindowStart)"
        },
        "sink":
        {
            "type": "BlobSink"
        },
        "Translator": 
        {
            "type": "TabularTranslator",
            "ColumnMappings": "UserId: MyUserId, Group: MyGroup,Name: MyName"
        }
    },
    "scheduler": {
          "frequency": "Hour",
          "interval": 1
        }
}

Dans ce cas, les résultats de la requête sont d’abord mappés vers les colonnes spécifiées dans la « structure » de la source.In this case, the query results are first mapped to columns specified in “structure” of source. Ensuite, les colonnes de la « structure » de la source sont mappées vers les colonnes de la « structure » du récepteur avec les règles spécifiées dans columnMappings.Next, the columns from source “structure” are mapped to columns in sink “structure” with rules specified in columnMappings. Supposons que la requête retourne cinq colonnes, c’est-à-dire deux colonnes de plus que celles spécifiées dans la « structure » de la source.Suppose the query returns 5 columns, two more columns than those specified in the “structure” of source.

Flux du mappage de colonnesColumn mapping flow

Flux du mappage de colonnes 2

Étapes suivantesNext steps

Suivez le didacticiel sur l’activité de copie dans l’article suivant :See the article for a tutorial on using Copy Activity: