Schema e mapping dei tipi di dati nell'attività di copiaSchema and data type mapping in copy activity

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

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.This article describes how the Azure Data Factory copy activity perform schema mapping and data type mapping from source data to sink data.

Mapping dello schemaSchema mapping

Mapping predefinitoDefault mapping

Per impostazione predefinita, l'attività di copia esegue il mapping dei dati di origine al sink in base ai nomi delle colonne in modo che siano sensibiliBy default, copy activity maps source data to sink by column names in case-sensitive manner. Se il sink non esiste, ad esempio scrivendo nei file, i nomi dei campi di origine verranno resi persistenti come nomi di sink.If sink doesn't exist, for example, writing to file(s), the source field names will be persisted as sink names. Se il sink esiste già, deve contenere tutte le colonne copiate dall'origine.If the sink already exists, it must contain all columns being copied from the source. Tale mapping predefinito supporta schemi flessibili e la deriva dello schema dall'origine al sink dall'esecuzione all'esecuzione. tutti i dati restituiti dall'archivio dati di origine possono essere copiati in sink.Such default mapping supports flexible schemas and schema drift from source to sink from execution to execution - all the data returned by source data store can be copied to sink.

Se l'origine è un file di testo senza riga di intestazione, il mapping esplicito è necessario perché l'origine non contiene nomi di colonna.If your source is text file without header line, explicit mapping is required as the source doesn't contain column names.

Mapping esplicitoExplicit mapping

È anche possibile specificare il mapping esplicito per personalizzare il mapping di colonne/campi dall'origine al sink in base alle esigenze.You can also specify explicit mapping to customize the column/field mapping from source to sink based on your need. Con il mapping esplicito è possibile copiare solo i dati di origine parziali nel sink o eseguire il mapping dei dati di origine al sink con nomi diversi oppure modificare la forma dei dati tabulari o gerarchici.With explicit mapping, you can copy only partial source data to sink, or map source data to sink with different names, or reshape tabular/hierarchical data. Attività di copia:Copy activity:

  1. Legge i dati dall'origine e determina lo schema di origine.Reads the data from source and determine the source schema.
  2. Applica il mapping definito.Applies your defined mapping.
  3. Scrive i dati nel sink.Writes the data to sink.

Sono disponibili altre informazioni su:Learn more about:

È possibile configurare il mapping nell'interfaccia utente di Data Factory creazione > dell'attività di copia-> scheda mapping o specificare a livello di codice il mapping nella proprietà attività di copia-> translator .You can configure the mapping on Data Factory authoring UI -> copy activity -> mapping tab, or programmatically specify the mapping in copy activity -> translator property. Le proprietà seguenti sono supportate negli translator -> mappings oggetti Array->-> source e sink , che punta alla colonna o al campo specifico per eseguire il mapping dei dati.The following properties are supported in translator -> mappings array -> objects -> source and sink, which points to the specific column/field to map data.

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
namename Nome del campo o della colonna di origine o del sink.Name of the source or sink column/field. Applicare per l'origine e il sink tabulari.Apply for tabular source and sink. Yes
ordinalordinal Indice di colonna.Column index. Iniziare da 1.Start from 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 l'origine e il sink gerarchici, ad esempio Cosmos DB, MongoDB o i connettori REST.Apply for hierarchical source and sink, for example, Cosmos DB, MongoDB, or REST connectors.
Per i campi sotto l'oggetto radice, il percorso JSON inizia con la radice. $ per i campi all'interno della matrice scelta dalla collectionReference proprietà, il percorso JSON inizia dall'elemento della matrice senza $ .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 without $.
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. In generale, non è necessario specificare o modificare questa proprietà.In general, you don't need to specify or change this property. Altre informazioni sul mapping dei tipi di dati.Learn more about data type mapping. 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.
In generale, non è necessario specificare o modificare questa proprietà.In general, you don't need to specify or change this property. Altre informazioni sul mapping dei tipi di dati.Learn more about data type mapping.
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. In generale, non è necessario specificare o modificare questa proprietà.In general, you don't need to specify or change this property. Altre informazioni sul mapping dei tipi di dati.Learn more about data type mapping. NoNo

Le proprietà seguenti sono supportate translator in oltre a mappings :The following properties are supported under translator in addition to mappings:

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
collectionReferencecollectionReference Applicare quando si copiano dati da un'origine gerarchica, ad esempio Cosmos DB, MongoDB o connettori REST.Apply when copying data from hierarchical source, for example, Cosmos DB, MongoDB, or REST connectors.
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

Da origine tabulare a sink tabulareTabular source to tabular sink

Ad esempio, per copiare dati da Salesforce nel database SQL di Azure ed eseguire il mapping esplicito di tre colonne:For example, to copy data from Salesforce to Azure SQL Database and explicitly map three columns:

  1. Nella scheda mapping dell'attività di copia > fare clic sul pulsante Importa schemi per importare gli schemi di origine e sink.On copy activity -> mapping tab, click Import schemas button to import both source and sink schemas.

  2. Eseguire il mapping dei campi necessari ed escludere/eliminare il resto.Map the needed fields and exclude/delete the rest.

Mappa tabulare a tabulare

Lo stesso mapping può essere configurato come segue nel payload dell'attività di copia (vedere translator ):The same mapping can be configured as the following in copy activity payload (see translator):

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "SalesforceSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "name": "Id" },
                    "sink": { "name": "CustomerID" }
                },
                {
                    "source": { "name": "Name" },
                    "sink": { "name": "LastName" }
                },
                {
                    "source": { "name": "LastModifiedDate" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

Per copiare dati da file di testo delimitati senza riga di intestazione, le colonne sono rappresentate in base al numero ordinale anziché ai nomi.To copy data from delimited text file(s) without header line, the columns are represented by ordinal instead of names.

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "DelimitedTextSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "ordinal": "1" },
                    "sink": { "name": "CustomerID" }
                }, 
                {
                    "source": { "ordinal": "2" },
                    "sink": { "name": "LastName" }
                }, 
                {
                    "source": { "ordinal": "3" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

Da origine gerarchica a sink tabulareHierarchical source to tabular sink

Quando si copiano dati da un'origine gerarchica a un sink tabulare, l'attività di copia supporta le funzionalità seguenti:When copying data from hierarchical source to tabular sink, copy activity supports the following capabilities:

  • Estrarre dati da oggetti e matrici.Extract data from objects and arrays.
  • Cross applica più oggetti con lo stesso modello da una matrice, nel qual caso è possibile convertire un oggetto JSON in più record in risultati tabulari.Cross apply multiple objects with the same pattern from an array, in which case to convert one JSON object into multiple records in tabular result.

Per una trasformazione gerarchica a tabella più avanzata, è possibile utilizzare il flusso di dati.For more advanced hierarchical-to-tabular transformation, you can use Data Flow.

Ad esempio, se si dispone di un documento di origine MongoDB con il contenuto seguente:For example, if you have source 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 desidera copiarlo in un file di testo nel formato seguente con la riga di intestazione, rendendo flat i dati all'interno della matrice (order_pd e order_price) e cross join con le informazioni radice comuni (numero, data e città):And you want to copy it into a text file in the following format with header line, 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

È possibile definire tale mapping in Data Factory interfaccia utente di creazione:You can define such mapping on Data Factory authoring UI:

  1. Nella scheda mapping dell'attività di copia > fare clic sul pulsante Importa schemi per importare gli schemi di origine e sink.On copy activity -> mapping tab, click Import schemas button to import both source and sink schemas. Data Factory esegue il campionamento dei primi oggetti quando si importa lo schema, se un campo non viene visualizzato, è possibile aggiungerlo al livello corretto nella gerarchia-passare il puntatore del mouse su un nome di campo esistente e scegliere di aggiungere un nodo, un oggetto o una matrice.As Data Factory samples the top few objects when importing schema, if any field doesn't show up, you can add it to the correct layer in the hierarchy - hover on an existing field name and choose to add a node, an object, or an array.

  2. Selezionare la matrice da cui si desidera eseguire l'iterazione ed estrarre i dati.Select the array from which you want to iterate and extract data. Verrà popolato automaticamente come riferimento alla raccolta.It will be auto populated as Collection reference. Si noti che per tale operazione è supportata una sola matrice.Note only single array is supported for such operation.

  3. Eseguire il mapping dei campi necessari per il sink.Map the needed fields to sink. Data Factory determina automaticamente i percorsi JSON corrispondenti per il lato gerarchico.Data Factory automatically determines the corresponding JSON paths for the hierarchical side.

Nota

Per i record in cui la matrice contrassegnata come riferimento alla raccolta è vuota e la casella di controllo è selezionata, l'intero record viene ignorato.For records where the array marked as collection reference is empty and the check box is selected, the entire record is skipped.

Mappa gerarchica a tabulare usando l'interfaccia utente

È anche possibile passare all' Editor avanzato, nel qual caso è possibile visualizzare e modificare direttamente i percorsi JSON dei campi.You can also switch to Advanced editor, in which case you can directly see and edit the fields' JSON paths. Se si sceglie di aggiungere nuovo mapping in questa visualizzazione, specificare il percorso JSON.If you choose to add new mapping in this view, specify the JSON path.

Eseguire il mapping gerarchico a tabulare mediante l'editor avanzato

Lo stesso mapping può essere configurato come segue nel payload dell'attività di copia (vedere translator ):The same mapping can be configured as the following in copy activity payload (see translator):

{
    "name": "CopyActivityHierarchicalToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "MongoDbV2Source" },
        "sink": { "type": "DelimitedTextSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "path": "$['number']" },
                    "sink": { "name": "orderNumber" }
                },
                {
                    "source": { "path": "$['date']" },
                    "sink": { "name": "orderDate" }
                },
                {
                    "source": { "path": "['prod']" },
                    "sink": { "name": "order_pd" }
                },
                {
                    "source": { "path": "['price']" },
                    "sink": { "name": "order_price" }
                },
                {
                    "source": { "path": "$['city'][0]['name']" },
                    "sink": { "name": "city" }
                }
            ],
            "collectionReference": "$['orders']"
        }
    },
    ...
}

Da origine tabulare/gerarchica a sink gerarchicoTabular/Hierarchical source to hierarchical sink

Il flusso dell'esperienza utente è simile a quello dell' origine gerarchica al sink tabulare.The user experience flow is similar to Hierarchical source to tabular sink.

Quando si copiano dati da un'origine tabulare a un sink gerarchico, la scrittura in una matrice all'interno di un oggetto non è supportata.When copying data from tabular source to hierarchical sink, writing to array inside object is not supported.

Quando si copiano dati da un'origine gerarchica a un sink gerarchico, è inoltre possibile mantenere la gerarchia dell'intero livello selezionando l'oggetto o la matrice e il mapping per il sink senza toccare i campi interni.When copying data from hierarchical source to hierarchical sink, you can additionally preserve entire layer's hierarchy, by selecting the object/array and map to sink without touching the inner fields.

Per una trasformazione di data shaping più avanzata, è possibile utilizzare il flusso di dati.For more advanced data reshape transformation, you can use Data Flow.

Mapping di parametriParameterize mapping

Se si desidera creare una pipeline creato un modello per copiare in modo dinamico un numero elevato di oggetti, determinare se è possibile utilizzare il mapping predefinito o se è necessario definire il mapping esplicito per i rispettivi oggetti.If you want to create a templatized pipeline to copy large number of objects dynamically, determine whether you can leverage the default mapping or you need to define explicit mapping for respective objects.

Se è necessario un mapping esplicito, è possibile:If explicit mapping is needed, you can:

  1. Definire un parametro con il tipo di oggetto a livello di pipeline, ad esempio mapping .Define a parameter with object type at the pipeline level, for example, mapping.

  2. Parametrizzare il mapping: nell'attività di copia > scheda mapping, scegliere di aggiungere il contenuto dinamico e selezionare il parametro precedente.Parameterize the mapping: on copy activity -> mapping tab, choose to add dynamic content and select the above parameter. Il payload dell'attività sarà analogo al seguente:The activity payload would be as the following:

    {
        "name": "CopyActivityHierarchicalToTabular",
        "type": "Copy",
        "typeProperties": {
            "source": {...},
            "sink": {...},
            "translator": {
                "value": "@pipeline().parameters.mapping",
                "type": "Expression"
            },
            ...
        }
    }
    
  3. Costruire il valore da passare al parametro di mapping.Construct the value to pass into the mapping parameter. Deve corrispondere all'intero oggetto della translator definizione. vedere la sezione Esempi in mapping esplicito .It should be the entire object of translator definition, refer to the samples in explicit mapping section. Ad esempio, per l'origine tabulare per la copia di sink tabulari, il valore deve essere {"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]} .For example, for tabular source to tabular sink copy, the value should be {"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]}.

Mapping dei tipi di datiData type mapping

L'attività di copia esegue il mapping dei tipi di origine ai tipi di sink con il flusso seguente:Copy activity performs source types to sink types mapping with the following flow:

  1. Converte i tipi di dati nativi di origine in Azure Data Factory tipi di dati provvisori.Convert from source native data types to Azure Data Factory interim data types.
  2. Converte automaticamente il tipo di dati provvisorio in base alle esigenze in modo da corrispondere ai tipi di sink corrispondenti, applicabili sia al mapping predefinito sia al mapping esplicitoAutomatically convert interim data type as needed to match corresponding sink types, applicable for both default mapping and explicit mapping.
  3. Conversione da tipi di dati Azure Data Factory interim a tipi di dati sink nativi.Convert from Azure Data Factory interim data types to sink native data types.

L'attività di copia supporta attualmente i tipi di dati provvisori seguenti: booleano, byte, matrice di byte, DateTime, DatetimeOffset, Decimal, Double, GUID, Int16, Int32, Int64, SByte, Single, String, TimeSpan, UInt16, UInt32 e UInt64.Copy activity currently supports the following interim data types: Boolean, Byte, Byte array, Datetime, DatetimeOffset, Decimal, Double, GUID, Int16, Int32, Int64, SByte, Single, String, Timespan, UInt16, UInt32, and UInt64.

Le conversioni dei tipi di dati seguenti sono supportate tra i tipi provvisori dall'origine al sink.The following data type conversions are supported between the interim types from source to sink.

Source\SinkSource\Sink BooleanBoolean Matrice di byteByte array DecimalDecimal Data/ora (1)Date/Time (1) Virgola mobile (2)Float-point (2) GUIDGUID Integer (3)Integer (3) stringString TimeSpanTimeSpan
BooleanBoolean
Matrice di byteByte array
Data/oraDate/Time
DecimalDecimal
Virgola mobileFloat-point
GUIDGUID
IntegerInteger
stringString
TimeSpanTimeSpan

(1) la data e l'ora includono DateTime e DateTimeOffset.(1) Date/Time includes DateTime and DateTimeOffset.

(2) float-Point include single e Double.(2) Float-point includes Single and Double.

(3) Integer include SByte, byte, Int16, UInt16, Int32, UInt32, Int64 e UInt64.(3) Integer includes SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, and UInt64.

Nota

  • Attualmente la conversione del tipo di dati è supportata quando si esegue la copia tra dati tabulari.Currently such data type conversion is supported when copying between tabular data. Le origini e i sink gerarchici non sono supportati, ovvero non esiste alcuna conversione del tipo di dati definita dal sistema tra i tipi provvisori di origine e sink.Hierarchical sources/sinks are not supported, which means there is no system-defined data type conversion between source and sink interim types.
  • Questa funzionalità funziona con il modello di set di dati più recente.This feature works with the latest dataset model. Se questa opzione non viene visualizzata nell'interfaccia utente, provare a creare un nuovo set di dati.If you don't see this option from the UI, try creating a new dataset.

Le proprietà seguenti sono supportate nell'attività di copia per la conversione del tipo di dati (nella translator sezione relativa alla creazione a livello di codice):The following properties are supported in copy activity for data type conversion (under translator section for programmatical authoring):

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
typeConversiontypeConversion Abilitare la nuova esperienza di conversione del tipo di dati.Enable the new data type conversion experience.
Il valore predefinito è false a causa della compatibilità con le versioni precedenti.Default value is false due to backward compatibility.

Per le nuove attività di copia create tramite l'interfaccia utente di creazione Data Factory dalla fine del 2020 giugno, questa conversione del tipo di dati è abilitata per impostazione predefinita per un'esperienza ottimale ed è possibile visualizzare le seguenti impostazioni di conversione dei tipi nell'attività di copia-scheda mapping > per gli scenari applicabili.For new copy activities created via Data Factory authoring UI since late June 2020, this data type conversion is enabled by default for the best experience, and you can see the following type conversion settings on copy activity -> mapping tab for applicable scenarios.
Per creare una pipeline a livello di codice, è necessario impostare in modo esplicito la typeConversion proprietà su true per abilitarla.To create pipeline programmatically, you need to explicitly set typeConversion property to true to enable it.
Per le attività di copia esistenti create prima del rilascio di questa funzionalità, non verranno visualizzate le opzioni di conversione dei tipi nell'interfaccia utente di creazione Data Factory per la compatibilità con le versioni precedenti.For existing copy activities created before this feature is released, you won't see type conversion options on Data Factory authoring UI for backward compatibility.
NoNo
typeConversionSettingstypeConversionSettings Gruppo di impostazioni di conversione dei tipi.A group of type conversion settings. Applicare quando typeConversion è impostato su true .Apply when typeConversion is set to true. Le proprietà seguenti sono tutte sottoposte a questo gruppo.The following properties are all under this group. NoNo
In typeConversionSettingsUnder typeConversionSettings
allowDataTruncationallowDataTruncation Consente il troncamento dei dati durante la conversione dei dati di origine in sink con tipo diverso durante la copia, ad esempio da Decimal a Integer, da DatetimeOffset a DateTime.Allow data truncation when converting source data to sink with different type during copy, for example, from decimal to integer, from DatetimeOffset to Datetime.
Il valore predefinito è true.Default value is true.
NoNo
treatBooleanAsNumbertreatBooleanAsNumber Considera i valori booleani come numeri, ad esempio true come 1.Treat booleans as numbers, for example, true as 1.
Il valore predefinito è false.Default value is false.
NoNo
dateTimeFormatdateTimeFormat Stringa di formato quando si esegue la conversione tra date senza offset di fuso orario e stringhe, ad esempio yyyy-MM-dd HH:mm:ss.fff .Format string when converting between dates without time zone offset and strings, for example, yyyy-MM-dd HH:mm:ss.fff. Per informazioni dettagliate, fare riferimento alle stringhe di formato di data e ora personalizzato .Refer to Custom Date and Time Format Strings for detailed information. NoNo
dateTimeOffsetFormatdateTimeOffsetFormat Stringa di formato quando si esegue la conversione tra le date con la differenza di fuso orario e le stringhe, ad esempio yyyy-MM-dd HH:mm:ss.fff zzz .Format string when converting between dates with time zone offset and strings, for example, yyyy-MM-dd HH:mm:ss.fff zzz. Per informazioni dettagliate, fare riferimento alle stringhe di formato di data e ora personalizzato .Refer to Custom Date and Time Format Strings for detailed information. NoNo
timeSpanFormattimeSpanFormat Stringa di formato durante la conversione tra i periodi di tempo e le stringhe, ad esempio dd\.hh\:mm .Format string when converting between time periods and strings, for example, dd\.hh\:mm. Per informazioni dettagliate, vedere stringhe di formato TimeSpan personalizzate .Refer to Custom TimeSpan Format Strings for detailed information. NoNo
cultureculture Informazioni sulle impostazioni cultura da utilizzare quando si convertono i tipi, ad esempio en-us o fr-fr .Culture information to be used when convert types, for example, en-us or fr-fr. NoNo

Esempio:Example:

{
    "name": "CopyActivity",
    "type": "Copy",
    "typeProperties": {
        "source": {
            "type": "ParquetSource"
        },
        "sink": {
            "type": "SqlSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "typeConversion": true,
            "typeConversionSettings": {
                "allowDataTruncation": true,
                "treatBooleanAsNumber": true,
                "dateTimeFormat": "yyyy-MM-dd HH:mm:ss.fff",
                "dateTimeOffsetFormat": "yyyy-MM-dd HH:mm:ss.fff zzz",
                "timeSpanFormat": "dd\.hh\:mm",
                "culture": "en-gb"
            }
        }
    },
    ...
}

Modalità legacyLegacy models

Nota

I modelli seguenti per eseguire il mapping delle colonne o dei campi di origine al sink sono ancora supportati come per la compatibilità con le versioni precedenti.The following models to map source columns/fields to sink are still supported as is for backward compatibility. Si consiglia di utilizzare il nuovo modello indicato nel mapping dello schema.We suggest that you use the new model mentioned in schema mapping. Data Factory interfaccia utente di creazione ha cambiato la generazione del nuovo modello.Data Factory authoring UI has switched to generating the new model.

Mapping di colonne alternativo (modello Legacy)Alternative column-mapping (legacy model)

È possibile specificare l'attività di copia-> per eseguire il translator -> columnMappings 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 di schemi alternativi (modello Legacy)Alternative schema-mapping (legacy model)

È possibile specificare l'attività di copia-> per eseguire il translator -> schemaMapping mapping tra i dati a forma di gerarchia e i dati a forma di tabulazione, ad esempio, copiare da MongoDB/Rest a file di testo e copiare da Oracle nell'API Azure Cosmos DB per MongoDB.You can specify copy activity -> translator -> schemaMapping to map between hierarchical-shaped data and tabular-shaped data, for example, 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 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: rappresenta l'origine.- 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.
- Valore: rappresenta il 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 dalla collectionReference proprietà, il percorso JSON inizia dall'elemento della 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": {
                "$.number": "orderNumber",
                "$.date": "orderDate",
                "prod": "order_pd",
                "price": "order_price",
                "$.city[0].name": "city"
            },
            "collectionReference":  "$.orders"
        }
    }
}

Passaggi successiviNext steps

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