Trasformazione alter Row nel flusso di dati del mappingAlter row transformation in mapping data flow

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Utilizzare la trasformazione alter Row per impostare i criteri INSERT, DELETE, Update e Upsert sulle righe.Use the Alter Row transformation to set insert, delete, update, and upsert policies on rows. È possibile aggiungere condizioni uno-a-molti come espressioni.You can add one-to-many conditions as expressions. Queste condizioni devono essere specificate in ordine di priorità, in quanto ogni riga verrà contrassegnata con i criteri corrispondenti alla prima espressione corrispondente.These conditions should be specified in order of priority, as each row will be marked with the policy corresponding to the first-matching expression. Ognuna di queste condizioni può comportare l'inserimento, l'aggiornamento, l'eliminazione o la corretto di una riga o di righe.Each of those conditions can result in a row (or rows) being inserted, updated, deleted, or upserted. Alter Row può produrre entrambe le azioni DDL & DML nel database.Alter Row can produce both DDL & DML actions against your database.

Alter Row-impostazioniAlter row settings

Le trasformazioni alter Row funzioneranno solo sui sink di database o CosmosDB nel flusso di dati.Alter Row transformations will only operate on database or CosmosDB sinks in your data flow. Le azioni assegnate alle righe (Insert, Update, DELETE, Upsert) non vengono eseguite durante le sessioni di debug.The actions that you assign to rows (insert, update, delete, upsert) won't occur during debug sessions. Eseguire un'attività Esegui flusso di dati in una pipeline per applicare i criteri alter Row nelle tabelle di database.Run an Execute Data Flow activity in a pipeline to enact the alter row policies on your database tables.

Specificare un criterio di riga predefinitoSpecify a default row policy

Creare una trasformazione alter Row e specificare un criterio di riga con la condizione true() .Create an Alter Row transformation and specify a row policy with a condition of true(). Ogni riga che non corrisponde ad alcuna espressione definita in precedenza verrà contrassegnata per i criteri di riga specificati.Each row that doesn't match any of the previously defined expressions will be marked for the specified row policy. Per impostazione predefinita, ogni riga che non corrisponde ad alcuna espressione condizionale verrà contrassegnata per Insert .By default, each row that doesn't match any conditional expression will be marked for Insert.

Alter Row PolicyAlter row policy

Nota

Per contrassegnare tutte le righe con un criterio, è possibile creare una condizione per quel criterio e specificare la condizione come true() .To mark all rows with one policy, you can create a condition for that policy and specify the condition as true().

Visualizzare i criteri nell'anteprima dei datiView policies in data preview

Utilizzare la modalità di debug per visualizzare i risultati dei criteri alter Row nel riquadro di anteprima dei dati.Use debug mode to view the results of your alter row policies in the data preview pane. Un'anteprima dei dati di una trasformazione alter Row non produrrà azioni DDL o DML sulla destinazione.A data preview of an alter row transformation won't produce DDL or DML actions against your target.

Alter Row (criteri)Alter row policies

Tutti i criteri alter Row sono rappresentati da un'icona che indica se si verificherà un'azione INSERT, Update, Upsert o Deleted.Each alter row policy is represented by an icon that indicates whether an insert, update, upsert, or deleted action will occur. L'intestazione superiore mostra il numero di righe interessate da ogni criterio nell'anteprima.The top header shows how many rows are affected by each policy in the preview.

Consenti alter Row Policy in sinkAllow alter row policies in sink

Affinché i criteri alter Row funzionino, il flusso di dati deve scrivere in un database o in un sink Cosmos.For the alter row policies to work, the data stream must write to a database or Cosmos sink. Nella scheda Impostazioni del sink abilitare i criteri alter Row consentiti per il sink.In the Settings tab in your sink, enable which alter row policies are allowed for that sink.

Alter Row sinkAlter row sink

Il comportamento predefinito è consentire solo gli inserimenti.The default behavior is to only allow inserts. Per consentire aggiornamenti, Upsert o eliminazioni, selezionare la casella nel sink corrispondente a tale condizione.To allow updates, upserts, or deletes, check the box in the sink corresponding to that condition. Se le eliminazioni Updates, Upsert o, sono abilitate, è necessario specificare le colonne chiave nel sink per le quali trovare la corrispondenza.If updates, upserts, or, deletes are enabled, you must specify which key columns in the sink to match on.

Nota

Se inserimenti, aggiornamenti o Upsert modifica lo schema della tabella di destinazione nel sink, il flusso di dati avrà esito negativo.If your inserts, updates, or upserts modify the schema of the target table in the sink, the data flow will fail. Per modificare lo schema di destinazione nel database, scegliere ricrea tabella come azione tabella.To modify the target schema in your database, choose Recreate table as the table action. Verrà eliminata e ricreata la tabella con la nuova definizione dello schema.This will drop and recreate your table with the new schema definition.

La trasformazione sink richiede una singola chiave o una serie di chiavi per l'identificazione univoca delle righe nel database di destinazione.The sink transformation requires either a single key or a series of keys for unique row identification in your target database. Per i sink SQL, impostare le chiavi nella scheda Impostazioni sink. Per CosmosDB, impostare la chiave di partizione nelle impostazioni e impostare anche il campo di sistema CosmosDB "ID" nel mapping del sink.For SQL sinks, set the keys in the sink settings tab. For CosmosDB, set the partition key in the settings and also set the CosmosDB system field "id" in your sink mapping. Per CosmosDB, è obbligatorio includere la colonna di sistema "ID" per gli aggiornamenti, Upsert ed eliminazioni.For CosmosDB, it is mandatory to include the system column "id" for updates, upserts, and deletes.

Merge e Upsert con il database SQL di Azure e la sinapsiMerges and upserts with Azure SQL Database and Synapse

I flussi di dati ADF supportano le unioni con il database SQL di Azure e il pool di database sinapsi (data warehouse) con l'opzione Upsert.ADF Data Flows supports merges against Azure SQL Database and Synapse database pool (data warehouse) with the upsert option.

Tuttavia, è possibile che si verifichino scenari in cui lo schema del database di destinazione utilizza la proprietà Identity delle colonne chiave.However, you may run into scenarios where your target database schema utilized the identity property of key columns. Con ADF è necessario identificare le chiavi che si utilizzeranno per trovare la corrispondenza con i valori di riga per gli aggiornamenti e Upsert.ADF requires you to identify the keys that you will use to match the row values for updates and upserts. Tuttavia, se per la colonna di destinazione è impostata la proprietà Identity e si utilizza il criterio Upsert, il database di destinazione non consentirà di scrivere nella colonna.But if the target column has the identity property set and you are using the upsert policy, the target database will not allow you to write to the column. È inoltre possibile che si verifichino errori quando si tenta di eseguire il Upsert sulla colonna di distribuzione di una tabella distribuita.You may also run into errors when you try to upsert against a distributed table's distribution column.

Ecco alcuni modi per risolvere il problema:Here are ways to fix that:

  1. Passare alle impostazioni di trasformazione del sink e impostare "Ignora scrittura colonne chiave".Go to the Sink transformation Settings and set "Skip writing key columns". Questo consentirà a ADF di non scrivere la colonna selezionata come valore chiave per il mapping.This will tell ADF to not write the column that you have selected as the key value for your mapping.

  2. Se tale colonna chiave non è la colonna che causa il problema per le colonne Identity, è possibile utilizzare l'opzione SQL di pre-elaborazione della trasformazione sink: SET IDENTITY_INSERT tbl_content ON .If that key column is not the column that is causing the issue for identity columns, then you can use the Sink transformation pre-processing SQL option: SET IDENTITY_INSERT tbl_content ON. Quindi, disattivarla con la proprietà SQL di post-elaborazione: SET IDENTITY_INSERT tbl_content OFF .Then, turn it off with the post-processing SQL property: SET IDENTITY_INSERT tbl_content OFF.

  3. Sia per il caso di identità che per la colonna di distribuzione, è possibile cambiare la logica da Upsert a utilizzando una condizione di aggiornamento separata e una condizione di inserimento separata utilizzando una trasformazione Suddivisione condizionale.For both the identity case and the distribution column case, you can switch your logic from Upsert to using a separate update condition and a separate insert condition using a Conditional Split transformation. In questo modo, è possibile impostare il mapping sul percorso di aggiornamento per ignorare il mapping delle colonne chiave.This way, you can set the mapping on the update path to ignore the key column mapping.

Script del flusso di datiData flow script

SintassiSyntax

<incomingStream>
    alterRow(
           insertIf(<condition>?),
           updateIf(<condition>?),
           deleteIf(<condition>?),
           upsertIf(<condition>?),
        ) ~> <alterRowTransformationName>

EsempioExample

Nell'esempio seguente viene illustrata una trasformazione alter Row denominata CleanData che accetta un flusso in ingresso SpecifyUpsertConditions e crea tre condizioni alter Row.The below example is an alter row transformation named CleanData that takes an incoming stream SpecifyUpsertConditions and creates three alter row conditions. Nella trasformazione precedente alterRowCondition viene calcolata una colonna denominata che determina se una riga viene inserita, aggiornata o eliminata nel database.In the previous transformation, a column named alterRowCondition is calculated that determines whether or not a row is inserted, updated, or deleted in the database. Se il valore della colonna ha un valore stringa corrispondente alla regola alter Row, viene assegnato a tale criterio.If the value of the column has a string value that matches the alter row rule, it is assigned that policy.

In Data Factory UX questa trasformazione è simile all'immagine seguente:In the Data Factory UX, this transformation looks like the below image:

Esempio di alter RowAlter row example

Lo script del flusso di dati per questa trasformazione si trova nel frammento di codice seguente:The data flow script for this transformation is in the snippet below:

SpecifyUpsertConditions alterRow(insertIf(alterRowCondition == 'insert'),
    updateIf(alterRowCondition == 'update'),
    deleteIf(alterRowCondition == 'delete')) ~> AlterRow

Passaggi successiviNext steps

Dopo la trasformazione alter Row, è possibile che si desideri eseguire il sink dei dati in un archivio dati di destinazione.After the Alter Row transformation, you may want to sink your data into a destination data store.