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

Questo articolo descrive il modo in cui l'attività di copia Azure Data Factory esegue il mapping dello schema e il mapping dei tipi di dati dai dati di origine ai dati sink quando si esegue la copia dei dati.This article describes how the Azure Data Factory copy activity does schema mapping and data type mapping from source data to sink data when executing the data copy.

Mapping dello schemaSchema mapping

Il mapping delle colonne viene applicato per la copia dei dati dall'origine al sink.Column mapping applies when copying data from source to sink. Per impostazione predefinita, l'attività di copia mappa i dati di origine a sink in base ai nomi di colonna.By default, copy activity map source data to sink by column names. È possibile specificare il mapping esplicito per personalizzare il mapping delle colonne in base alle 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. Utilizzare il mapping di colonna predefinito per eseguire il mapping delle colonne in base al nome oppure applicare il mapping esplicito della colonna 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 di cui eseguire il mapping nell'attività di copia-> translator -> proprietà mappings.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 al 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 -> oggetto mappings-> con source e sink:The following properties are supported under translator -> mappings -> object with source and sink:

ProprietàProperty DescriptionDescription ObbligatoriaRequired
namename Nome della colonna di origine o sink.Name of the source or sink column. Yes
ordinalordinal Indice di colonna.Column index. Iniziare con 1.Start with 1.
Apply e Required quando si usa un testo delimitato senza riga di intestazione.Apply and required when using delimited text without header line.
NoNo
pathpath Espressione del percorso JSON per ogni campo da estrarre o mappare.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, il percorso JSON inizia con la radice $; per i campi all'interno della matrice scelta da collectionReference proprietà, il percorso JSON inizia dall'elemento di matrice.For fields under the root object, the JSON path starts with root $; for fields inside the array chosen by collectionReference property, JSON path starts from the array element.
NoNo
typetype Data Factory tipo di dati provvisori 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.
Applicare 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 di formato da utilizzare quando il tipo è 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 DescriptionDescription ObbligatoriaRequired
collectionReferencecollectionReference Supportato solo quando i dati gerarchici, ad esempio MongoDB/REST, sono di 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 colonne alternativeAlternative column mapping

È possibile specificare l'attività di copia-> translator -> columnMappings per eseguire il mapping tra dati a forma di tabulazione.You can specify copy activity -> translator -> columnMappings to map between tabular-shaped data . In questo caso, la sezione "Structure" è obbligatoria per i set di dati di input e di output.In this case, the "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 punta a una tabella in un database Oracle 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 che punta 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 la proprietà translator -> ColumnMappings .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 l'attività di copia-> translator -> schemaMapping per eseguire il mapping tra dati a forma di gerarchia e dati a forma di tabulazione, ad esempio copia da MongoDB/REST a file di testo e copia 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 DescriptionDescription 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 Raccolta di coppie chiave-valore che rappresenta la relazione di mapping dal lato di origine al lato del sink.A collection of key-value pairs, which represents the mapping relation from source side to sink side.
- Key: origine rappresenta.- Key: represents source. Per l' origine tabulare, specificare il nome della colonna come definito nella struttura del set di dati. per l' origine gerarchica, specificare l'espressione del percorso JSON per ogni campo da estrarre e mappare.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 il sink tabulare, specificare il nome della colonna come definito nella struttura del set di dati. per il sink gerarchico, specificare l'espressione del percorso JSON per ogni campo da estrarre e mappare.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 di dati gerarchici, per i campi sotto l'oggetto radice, il percorso JSON inizia con la radice $; per i campi all'interno della matrice scelta da collectionReference proprietà, il percorso JSON inizia dall'elemento di 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: copia 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: è possibile specificare i valori seguenti quando si configurano le informazioni sul tipo nella configurazione della struttura DataSet :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
  • SingoloSingle
  • StringaString
  • TimeSpanTimespan

Passaggi successiviNext steps

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