Spostamento dello schema nel flusso di dati del mappingSchema drift in mapping data flow

La deriva dello schema è il caso in cui le origini spesso cambiano i metadati.Schema drift is the case where your sources often change metadata. I campi, le colonne e i tipi possono essere aggiunti, rimossi o modificati in tempo reale.Fields, columns, and, types can be added, removed, or changed on the fly. Senza gestire la deriva dello schema, il flusso di dati diventa vulnerabile alle modifiche dell'origine dati upstream.Without handling for schema drift, your data flow becomes vulnerable to upstream data source changes. I modelli ETL tipici hanno esito negativo quando le colonne e i campi in arrivo cambiano perché tendono a essere associati a questi nomi di origine.Typical ETL patterns fail when incoming columns and fields change because they tend to be tied to those source names.

Per proteggersi dalla deriva dello schema, è importante che le funzionalità di uno strumento flusso di dati consentano di:To protect against schema drift, it's important to have the facilities in a data flow tool to allow you, as a Data Engineer, to:

  • Definire le origini con nomi di campi, tipi di dati, valori e dimensioni modificabiliDefine sources that have mutable field names, data types, values, and sizes
  • Definire i parametri di trasformazione che possono funzionare con i modelli di dati invece di valori e campi impostati come hardcodedDefine transformation parameters that can work with data patterns instead of hard-coded fields and values
  • Definire le espressioni in grado di riconoscere i criteri per la corrispondenza dei campi in ingresso, invece di usare campi denominatiDefine expressions that understand patterns to match incoming fields, instead of using named fields

Azure Data Factory supporta in modo nativo schemi flessibili che passano dall'esecuzione all'esecuzione, in modo da poter compilare la logica di trasformazione dei dati generici senza la necessità di ricompilare i flussi di dati.Azure Data Factory natively supports flexible schemas that change from execution to execution so that you can build generic data transformation logic without the need to recompile your data flows.

Nel flusso di dati è necessario prendere una decisione dal punto di vista dell'architettura riguardo a se accettare la deviazione dello schema in tutto il flusso.You need to make an architectural decision in your data flow to accept schema drift throughout your flow. In questo modo, è possibile proteggersi da modifiche dello schema rispetto alle origini.When you do this, you can protect against schema changes from the sources. Tuttavia, si perderanno le prime associazioni delle colonne e dei tipi nel flusso di dati.However, you'll lose early-binding of your columns and types throughout your data flow. Azure Data Factory considera i flussi di derivazione dello schema come flussi di associazione tardiva. Pertanto, quando si compilano le trasformazioni, i nomi delle colonne non saranno disponibili nelle viste dello schema in tutto il flusso.Azure Data Factory treats schema drift flows as late-binding flows, so when you build your transformations, the drifted column names won't be available to you in the schema views throughout the flow.

Spostamento dello schema nell'origineSchema drift in source

Le colonne che entrano nel flusso di dati dalla definizione di origine sono definite come "spostate" quando non sono presenti nella proiezione di origine.Columns coming into your data flow from your source definition are defined as "drifted" when they are not present in your source projection. È possibile visualizzare la proiezione di origine dalla scheda proiezione nella trasformazione origine.You can view your source projection from the projection tab in the source transformation. Quando si seleziona un set di dati per l'origine, ADF prenderà automaticamente lo schema dal set di dati e creerà un progetto da tale definizione dello schema del set di dati.When you select a dataset for your source, ADF will automatically take the schema from the dataset and create a project from that dataset schema definition.

In una trasformazione origine la deriva dello schema è definita come la lettura di colonne che non sono definite nello schema del set di dati.In a source transformation, schema drift is defined as reading columns that aren't defined your dataset schema. Per abilitare la deriva dello schema, selezionare Consenti Drift schema nella trasformazione origine.To enable schema drift, check Allow schema drift in your source transformation.

Origine della deriva dello schemaSchema drift source

Quando lo spostamento dello schema è abilitato, tutti i campi in ingresso vengono letti dall'origine durante l'esecuzione e passati attraverso l'intero flusso al sink.When schema drift is enabled, all incoming fields are read from your source during execution and passed through the entire flow to the Sink. Per impostazione predefinita, tutte le colonne rilevate di recente, note come colonnetrascinate, arrivano come tipo di dati stringa.By default, all newly detected columns, known as drifted columns, arrive as a string data type. Se si desidera che il flusso di dati deduca automaticamente i tipi di dati delle colonne di cui è stato possibile eseguire il drifting, controllare dedurre i tipi di colonna in base alle impostazioni di origineIf you wish for your data flow to automatically infer data types of drifted columns, check Infer drifted column types in your source settings.

Spostamento dello schema nel sinkSchema drift in sink

In una trasformazione sink la deriva dello schema è quando si scrivono colonne aggiuntive in base a quanto definito nello schema dei dati sink.In a sink transformation, schema drift is when you write additional columns on top of what is defined in the sink data schema. Per abilitare la deriva dello schema, selezionare Consenti la deriva dello schema nella trasformazione del sink.To enable schema drift, check Allow schema drift in your sink transformation.

Sink di Drift dello schemaSchema drift sink

Se la deriva dello schema è abilitata, assicurarsi che il dispositivo di scorrimento mapping automatico nella scheda mapping sia attivato.If schema drift is enabled, make sure the Auto-mapping slider in the Mapping tab is turned on. Con questo dispositivo di scorrimento, tutte le colonne in ingresso vengono scritte nella destinazione.With this slider on, all incoming columns are written to your destination. In caso contrario, è necessario utilizzare il mapping basato su regole per scrivere colonne trascinate.Otherwise you must use rule-based mapping to write drifted columns.

Mapping automatico sinkSink auto mapping

Trasformazione di colonne derivateTransforming drifted columns

Quando nel flusso di dati sono presenti colonne spostate, è possibile accedervi nelle trasformazioni con i metodi seguenti:When your data flow has drifted columns, you can access them in your transformations with the following methods:

  • Utilizzare le espressioni byPosition e byName per fare riferimento in modo esplicito a una colonna in base al nome o al numero di posizione.Use the byPosition and byName expressions to explicitly reference a column by name or position number.
  • Aggiungere un modello di colonna in una colonna derivata o una trasformazione aggregazione in modo che corrisponda a qualsiasi combinazione di nome, flusso, posizione o tipoAdd a column pattern in a Derived Column or Aggregate transformation to match on any combination of name, stream, position, or type
  • Aggiunta di un mapping basato su regole in una trasformazione SELECT o sink per la corrispondenza tra colonne spostate e alias di colonne tramite un modelloAdd rule-based mapping in a Select or Sink transformation to match drifted columns to columns aliases via a pattern

Per ulteriori informazioni su come implementare i modelli di colonna, vedere modelli di colonna nel flusso di dati di mapping.For more information on how to implement column patterns, see Column patterns in mapping data flow.

Azione rapida per le colonne con driftingMap drifted columns quick action

Per fare riferimento in modo esplicito alle colonne derivate, è possibile generare rapidamente i mapping per queste colonne tramite un'azione rapida di anteprima dei dati.To explicitly reference drifted columns, you can quickly generate mappings for these columns via a data preview quick action. Una volta impostata la modalità di debug , passare alla scheda Anteprima dati e fare clic su Aggiorna per recuperare un'anteprima dei dati.Once debug mode is on, go to the Data Preview tab and click Refresh to fetch a data preview. Se data factory rileva che sono presenti colonne spostate, è possibile fare clic su mappa e generare una colonna derivata che consente di fare riferimento a tutte le colonne spostate nelle viste dello schema downstream.If data factory detects that drifted columns exist, you can click Map Drifted and generate a derived column that allows you to reference all drifted columns in schema views downstream.

Mappa con deviazioneMap drifted

Nella trasformazione colonna derivata generata, viene eseguito il mapping di ogni colonna spostata al nome e al tipo di dati rilevati.In the generated Derived Column transformation, each drifted column is mapped to its detected name and data type. Nell'anteprima dei dati sopra riportata, la colonna "movieId" viene rilevata come numero intero.In the above data preview, the column 'movieId' is detected as an integer. Dopo aver fatto clic su mapping , movieId viene definito nella colonna derivata come toInteger(byName('movieId')) e incluso nelle viste dello schema nelle trasformazioni downstream.After Map Drifted is clicked, movieId is defined in the Derived Column as toInteger(byName('movieId')) and included in schema views in downstream transformations.

Mappa con deviazioneMap drifted

Passaggi successiviNext steps

Nel linguaggio delle espressioni del flusso di datisono disponibili ulteriori funzionalità per i modelli di colonna e la deriva dello schema, tra cui "byName" e "byPosition".In the Data Flow Expression Language, you'll find additional facilities for column patterns and schema drift including "byName" and "byPosition".