Mapping dello schema nell'attività di copiaSchema mapping in copy activity

Questo articolo illustra come l'attività di copia di Azure Data Factory esegue il mapping dello schema e dei tipi di dati dall'origine al sink quando si copiano dati.This article describes how Azure Data Factory copy activity does schema mapping and data type mapping from source data to sink data when execute the data copy.

Mapping dello schemaSchema mapping

Mapping di colonne si applica quando si copiano dati dall'origine al sink.Column mapping applies when copying data from source to sink. Per impostazione predefinita, attività di copia eseguire il mapping dei dati di origine al sink per i nomi di colonna.By default, copy activity map source data to sink by column names. È possibile specificare mapping esplicito per personalizzare il mapping della colonna in base alle proprie esigenze.You can specify explicit mapping to customize the column mapping based on your need. Più in particolare, l'attività di copia:More specifically, copy activity:

  1. Legge i dati dall'origine e determina lo schema di origineRead the data from source and determine the source schema
  2. Usare mapping di colonne predefinito per eseguire il mapping di colonne in base al nome o applicare mapping esplicito di colonne, se specificato.Use default column mapping to map columns by name, or apply explicit column mapping if specified.
  3. Scrivere dati nel sinkWrite the data to sink

Mapping esplicitoExplicit mapping

È possibile specificare le colonne per eseguire il mapping nell'attività di copia -> translator -> mappings proprietà.You can specify the columns to map in copy activity -> translator -> mappings property. L'esempio seguente definisce un'attività di copia in una pipeline per copiare dati da testo delimitato in Database SQL di Azure.The following example defines a copy activity in a pipeline to copy data from delimited text to Azure SQL Database.

{
    "name": "CopyActivity",
    "type": "Copy",
    "inputs": [{
        "referenceName": "DelimitedTextInput",
        "type": "DatasetReference"
    }],
    "outputs": [{
        "referenceName": "AzureSqlOutput",
        "type": "DatasetReference"
    }],
    "typeProperties": {
        "source": { "type": "DelimitedTextSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": {
                        "name": "UserId",
                        "type": "Guid"
                    },
                    "sink": {
                        "name": "MyUserId"
                    }
                }, 
                {
                    "source": {
                        "name": "Name",
                        "type": "String"
                    },
                    "sink": {
                        "name": "MyName"
                    }
                }, 
                {
                    "source": {
                        "name": "Group",
                        "type": "String"
                    },
                    "sink": {
                        "name": "MyGroup"
                    }
                }
            ]
        }
    }
}

Le proprietà seguenti sono supportate in translator -> mappings -> oggetto con source e sink:The following properties are supported under translator -> mappings -> object with source and sink:

ProprietàProperty DescrizioneDescription ObbligatorioRequired
namename Nome della colonna di origine o sink.Name of the source or sink column. Yes
ordinalordinal Indice della colonna.Column index. Iniziare con 1.Start with 1.
Applicare e obbligatorio quando si utilizzando delimitato da testo senza intestazione riga.Apply and required when using delimited text without header line.
NoNo
pathpath Espressione di percorso JSON per ogni campo da estrarre o eseguire il mapping.JSON path expression for each field to extract or map. Applicare per i dati gerarchici, ad esempio MongoDB/REST.Apply for hierarchical data e.g. MongoDB/REST.
Per i campi sotto l'oggetto radice, percorso JSON inizia con la radice $; per i campi nella matrice scelta dalla collectionReference percorso JSON di proprietà, inizia dall'elemento matrice.For fields under root object, JSON path starts with root $; for fields inside the array chosen by collectionReference property, JSON path starts from the array element.
NoNo
typetype Tipo di dati provvisori Data Factory della colonna di origine o sink.Data Factory interim data type of the source or sink column. NoNo
cultureculture Impostazioni cultura della colonna di origine o sink.Culture of the source or sink column.
Si applicano quando il tipo è Datetime o Datetimeoffset.Apply when type is Datetime or Datetimeoffset. Il valore predefinito è en-us.The default is en-us.
NoNo
formatformat Stringa da utilizzare quando il tipo è di formato Datetime o Datetimeoffset.Format string to be used when type is Datetime or Datetimeoffset. Per informazioni su come formattare datetime, vedere Stringhe di formato di data e ora personalizzato.Refer to Custom Date and Time Format Strings on how to format datetime. NoNo

Le proprietà seguenti sono supportate in translator -> mappings oltre all'oggetto con source e sink:The following properties are supported under translator -> mappings in addition to object with source and sink:

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
collectionReferencecollectionReference Supportato solo quando i dati gerarchici, ad esempio MongoDB/REST sono origine.Supported only when hierarchical data e.g. MongoDB/REST is source.
Per eseguire l'iterazione dei dati ed estrarli dagli oggetti presenti nel campo di una matrice con lo stesso modello e convertirli in una struttura per riga e per oggetto, specificare il percorso JSON di tale matrice per eseguire il cross apply.If you want to iterate and extract data from the objects inside an array field with the same pattern and convert to per row per object, specify the JSON path of that array to do cross-apply.
NoNo

Mapping di colonna alternativiAlternative column mapping

È possibile specificare copia -> attività translator -> columnMappings per eseguire il mapping tra i dati a forma tabulare.You can specify copy activity -> translator -> columnMappings to map between tabular-shaped data . Sezione "structure" in questo caso, è necessario per i set di dati di input e di output.In this case, "structure" section is required for both input and output datasets. Il mapping di colonne supporta il mapping di tutte le colonne o di un sottoinsieme delle colonne nella "struttura" del set di dati di origine a tutte le colonne della "struttura" del set di dati del sink.Column mapping supports mapping all or subset of columns in the source dataset "structure" to all columns in the sink dataset "structure". Le seguenti sono condizioni di errore che generano un'eccezione:The following are error conditions that result in an exception:

  • Il risultato della query dell'archivio dati di origine non ha un nome colonna specificato nella sezione "struttura" del set di dati di input.Source data store query result does not have a column name that is specified in the input dataset "structure" section.
  • L'archivio dati sink (con schema predefinito) non ha un nome colonna specificato nella sezione "struttura" del set di dati di output.Sink data store (if with pre-defined schema) does not have a column name that is specified in the output dataset "structure" section.
  • Un numero inferiore o superiore di colonne nella "struttura" del set di dati di sink rispetto a quanto specificato nel mapping.Either fewer columns or more columns in the "structure" of sink dataset than specified in the mapping.
  • Mapping duplicato.Duplicate mapping.

Nell'esempio seguente, il set di dati di input ha una struttura e punti a una tabella in un database Oracle in locale.In the following example, the input dataset has a structure and it points to a table in an on-premises Oracle database.

{
    "name": "OracleDataset",
    "properties": {
        "structure":
         [
            { "name": "UserId"},
            { "name": "Name"},
            { "name": "Group"}
         ],
        "type": "OracleTable",
        "linkedServiceName": {
            "referenceName": "OracleLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SourceTable"
        }
    }
}

In questo esempio, il set di dati di output ha una struttura e punti a una tabella in Salesfoce.In this sample, the output dataset has a structure and it points to a table in Salesfoce.

{
    "name": "SalesforceDataset",
    "properties": {
        "structure":
        [
            { "name": "MyUserId"},
            { "name": "MyName" },
            { "name": "MyGroup"}
        ],
        "type": "SalesforceObject",
        "linkedServiceName": {
            "referenceName": "SalesforceLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SinkTable"
        }
    }
}

Il codice JSON seguente definisce un'attività di copia in una pipeline.The following JSON defines a copy activity in a pipeline. Le colonne dell'origine vengono mappate alle colonne nel sink utilizzando il traduttore -> columnMappings proprietà.The columns from source mapped to columns in sink by using the translator -> columnMappings property.

{
    "name": "CopyActivity",
    "type": "Copy",
    "inputs": [
        {
            "referenceName": "OracleDataset",
            "type": "DatasetReference"
        }
    ],
    "outputs": [
        {
            "referenceName": "SalesforceDataset",
            "type": "DatasetReference"
        }
    ],
    "typeProperties":    {
        "source": { "type": "OracleSource" },
        "sink": { "type": "SalesforceSink" },
        "translator":
        {
            "type": "TabularTranslator",
            "columnMappings":
            {
                "UserId": "MyUserId",
                "Group": "MyGroup",
                "Name": "MyName"
            }
        }
    }
}

La sintassi di "columnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName" per specificare il mapping di colonne è ancora supportata.If you are using the syntax of "columnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName" to specify column mapping, it is still supported as-is.

Mapping dello schema alternativoAlternative schema mapping

È possibile specificare copia -> attività translator -> schemaMapping per eseguire il mapping tra dati gerarchica a forma di e tabulare a forma di dati, ad esempio, copiare da MongoDB/REST a file di testo e copiare da Oracle all'API di Azure Cosmos DB per MongoDB.You can specify copy activity -> translator -> schemaMapping to map between hierarchical-shaped data and tabular-shaped data, e.g. copy from MongoDB/REST to text file and copy from Oracle to Azure Cosmos DB's API for MongoDB. Nella sezione translator dell'attività di copia sono supportate le proprietà seguenti:The following properties are supported in copy activity translator section:

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
typetype La proprietà type del convertitore dell'attività di copia deve essere impostata su: TabularTranslatorThe type property of the copy activity translator must be set to: TabularTranslator Yes
schemaMappingschemaMapping Una raccolta di coppie chiave-valore, che rappresenta la relazione di mapping dal lato di origine al sink lato.A collection of key-value pairs, which represents the mapping relation from source side to sink side.
- Key: origine rappresenta.- Key: represents source. Per la origine tabulari, specificare il nome della colonna definite nella struttura di set di dati, per origine gerarchici, specificare l'espressione di percorso JSON per ogni campo da estrarre ed eseguire il mapping.For tabular source, specify the column name as defined in dataset structure; for hierarchical source, specify the JSON path expression for each field to extract and map.
- Value: rappresenta sink.- Value: represents sink. Per la sink tabulari, specificare il nome della colonna definite nella struttura di set di dati, per sink gerarchici, specificare l'espressione di percorso JSON per ogni campo da estrarre ed eseguire il mapping.For tabular sink, specify the column name as defined in dataset structure; for hierarchical sink, specify the JSON path expression for each field to extract and map.
Nel caso i dati gerarchici, per i campi sotto l'oggetto radice, percorso JSON inizia con la radice $; per i campi nella matrice scelta dalla collectionReference percorso JSON di proprietà, inizia dall'elemento matrice.In the case of hierarchical data, for fields under root object, JSON path starts with root $; for fields inside the array chosen by collectionReference property, JSON path starts from the array element.
Yes
collectionReferencecollectionReference Per eseguire l'iterazione dei dati ed estrarli dagli oggetti presenti nel campo di una matrice con lo stesso modello e convertirli in una struttura per riga e per oggetto, specificare il percorso JSON di tale matrice per eseguire il cross apply.If you want to iterate and extract data from the objects inside an array field with the same pattern and convert to per row per object, specify the JSON path of that array to do cross-apply. Questa proprietà è supportata solo quando l'origine è costituita da dati gerarchici.This property is supported only when hierarchical data is source. NoNo

Esempio: copiare da MongoDB a Oracle:Example: copy from MongoDB to Oracle:

Se ad esempio si ha un il documento di MongoDB con il contenuto seguente:For example, if you have MongoDB document with the following content:

{
    "id": {
        "$oid": "592e07800000000000000000"
    },
    "number": "01",
    "date": "20170122",
    "orders": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "name": "Seattle" } ]
}

e si vuole copiare tale contenuto in una tabella SQL di Azure nel formato seguente, rendendo flat i dati nella matrice (order_pd e order_price) e nel crossjoin con le informazioni radice comuni (numero, data e città) :and you want to copy it into an Azure SQL table in the following format, by flattening the data inside the array (order_pd and order_price) and cross join with the common root info (number, date, and city):

orderNumberorderNumber orderDateorderDate order_pdorder_pd order_priceorder_price citycity
0101 2017012220170122 P1P1 2323 SeattleSeattle
0101 2017012220170122 P2P2 1313 SeattleSeattle
0101 2017012220170122 P3P3 231231 SeattleSeattle

Configurare la regola di mapping dello schema come l'esempio JSON seguente di attività di copia:Configure the schema-mapping rule as the following copy activity JSON sample:

{
    "name": "CopyFromMongoDBToOracle",
    "type": "Copy",
    "typeProperties": {
        "source": {
            "type": "MongoDbV2Source"
        },
        "sink": {
            "type": "OracleSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "schemaMapping": {
                "orderNumber": "$.number",
                "orderDate": "$.date",
                "order_pd": "prod",
                "order_price": "price",
                "city": " $.city[0].name"
            },
            "collectionReference":  "$.orders"
        }
    }
}

Mapping dei tipi di datiData type mapping

L'attività di copia esegue il mapping dei tipi di origine ai tipi sink con il metodo seguente in due passaggi:Copy activity performs source types to sink types mapping with the following 2-step approach:

  1. Conversione dai tipi di origine nativi ai tipi di dati provvisori di Azure Data FactoryConvert from native source types to Azure Data Factory interim data types
  2. Conversione dai tipi di dati provvisori di Azure Data Factory al tipo di sink nativoConvert from Azure Data Factory interim data types to native sink type

È possibile trovare il mapping dal tipo nativo al tipo provvisorio nella sezione "Mapping dei tipi di dati" di ogni argomento sui connettori.You can find the mapping between native type to interim type in the "Data type mapping" section in each connector topic.

Tipi di dati supportatiSupported data types

Data Factory supporta i tipi di dati provvisori seguenti: Quando si configurano le informazioni sui tipi nella configurazione della struttura del set di dati è possibile specificare i valori seguenti:Data Factory supports the following interim data types: You can specify below values when configuring type information in dataset structure configuration:

  • Byte[]Byte[]
  • BooleanBoolean
  • DatetimeDatetime
  • DatetimeoffsetDatetimeoffset
  • DecimalDecimal
  • DoubleDouble
  • GuidGuid
  • Int16Int16
  • Int32Int32
  • Int64Int64
  • SingleSingle
  • StringString
  • TimespanTimespan

Passaggi successiviNext steps

Vedere gli altri articoli relativi all'attività di copia:See the other Copy Activity articles: