Modificare la trasformazione riga nel flusso di dati di mapping

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

I flussi di dati sono disponibili sia in Azure Data Factory che in Azure Synapse Pipelines. Questo articolo si applica ai flussi di dati di mapping. Se non si ha esperienza con le trasformazioni, vedere l'articolo introduttivo Trasformare i dati usando un flusso di dati di mapping.

Utilizzare la trasformazione Alter Row per impostare criteri di inserimento, eliminazione, aggiornamento e upsert per le righe. È possibile aggiungere condizioni uno-a-molti come espressioni. È necessario specificare queste condizioni in ordine di priorità, poiché ogni riga verrà contrassegnata con il criterio corrispondente alla prima espressione associata. Tutte queste condizioni possono provocare l'inserimento, l'aggiornamento, l'eliminazione o l'upsert di una o più righe. Alter Row può produrre azioni DDL e DML sul database.

Alter row settings

Le trasformazioni Alter Row operano solo su sink di database, REST o Azure Cosmos DB nel flusso di dati. Le azioni assegnate alle righe (inserimento, aggiornamento, eliminazione, upsert) non verranno eseguite durante le sessioni di debug. Eseguire un'attività Esegui Flusso di dati in una pipeline per applicare i criteri di modifica delle righe nelle tabelle di database.

Nota

Non è necessaria una trasformazione Alter Row per i flussi di dati Change Data Capture che usano origini CDC native come SQL Server o SAP. In questi casi, ADF rileverà automaticamente il marcatore di riga in modo che i criteri Alter Row non siano necessari.

Specificare un criterio di riga predefinito

Creare una trasformazione Alter Row e specificare un criterio di riga con una condizione di true(). Ogni riga che non corrisponde a nessuna delle espressioni definite in precedenza verrà contrassegnata per i criteri di riga specificati. Per impostazione predefinita, ogni riga che non corrisponde ad alcuna espressione condizionale verrà contrassegnata per Insert.

Alter row policy

Nota

Per contrassegnare tutte le righe con un criterio, è possibile creare una condizione per tale criterio e specificare la condizione come true().

Visualizzare i criteri nell'anteprima dei dati

Usare la modalità di debug per visualizzare i risultati dei criteri di modifica delle righe nel riquadro di anteprima dei dati. Un'anteprima dei dati di una trasformazione alter row non produrrà azioni DDL o DML sulla destinazione.

Alter row policies

Ogni criterio di modifica riga è rappresentato da un'icona che indica se si verificherà un'azione di inserimento, aggiornamento, upsert o eliminazione. L'intestazione superiore mostra il numero di righe interessate da ogni criterio nell'anteprima.

Consenti modifica criteri di riga nel sink

Per il funzionamento dei criteri di modifica delle righe, il flusso di dati deve scrivere in un database o in un sink di Azure Cosmos DB. Nella scheda Impostazioni nel sink abilitare la modifica dei criteri di riga per tale sink.

Alter row sink

Il comportamento predefinito consiste nell'consentire solo gli inserimenti. Per consentire aggiornamenti, upsert o eliminazioni, selezionare la casella nel sink corrispondente a tale condizione. Se gli aggiornamenti, gli upsert o le eliminazioni sono abilitati, è necessario specificare le colonne chiave nel sink su cui trovare la corrispondenza.

Nota

Se gli inserimenti, gli aggiornamenti o gli upsert modificano lo schema della tabella di destinazione nel sink, il flusso di dati avrà esito negativo. Per modificare lo schema di destinazione nel database, scegliere Ricrea tabella come azione di tabella. Verrà eliminato e ricreato la tabella con la nuova definizione dello schema.

La trasformazione sink richiede una singola chiave o una serie di chiavi per l'identificazione di riga univoca nel database di destinazione. Per i sink SQL, impostare le chiavi nella scheda impostazioni sink. Per Azure Cosmos DB, impostare la chiave di partizione nelle impostazioni e impostare anche il campo di sistema di Azure Cosmos DB "id" nel mapping del sink. Per Azure Cosmos DB, è obbligatorio includere la colonna di sistema "id" per aggiornamenti, upsert ed eliminazioni.

Unisce e upsert con database SQL di Azure e Azure Synapse

Flusso di dati supportano le operazioni di merge con database SQL di Azure e pool di database di Azure Synapse (data warehouse) con l'opzione upsert.

Tuttavia, è possibile che si verifichino scenari in cui lo schema del database di destinazione ha utilizzato la proprietà Identity delle colonne chiave. Il servizio richiede di identificare le chiavi che verranno usate per trovare le corrispondenze con i valori di riga per gli aggiornamenti e gli upsert. Tuttavia, se la colonna di destinazione ha la proprietà Identity impostata e si usano i criteri upsert, il database di destinazione non consentirà di scrivere nella colonna. È anche possibile che si verifichino errori quando si tenta di eseguire l'upsert sulla colonna di distribuzione di una tabella distribuita.

Ecco alcuni modi per risolvere questo problema:

  1. Passare alla trasformazione Sink Impostazioni e impostare "Skip writing key columns" (Ignora la scrittura di colonne chiave). In questo modo il servizio non scriverà la colonna selezionata come valore della chiave per il mapping.

  2. Se la colonna chiave non è la colonna che causa il problema per le colonne Identity, è possibile usare l'opzione Trasformazione sink di pre-elaborazione SQL: SET IDENTITY_INSERT tbl_content ON. Disattivarla quindi con la proprietà SQL post-elaborazione: SET IDENTITY_INSERT tbl_content OFF.

  3. Sia per il caso identity che per la colonna di distribuzione, è possibile passare dalla logica upsert all'uso di una condizione di aggiornamento separata e di una condizione di inserimento separata tramite una trasformazione Suddivisione condizionale. In questo modo, è possibile impostare il mapping nel percorso di aggiornamento per ignorare il mapping delle colonne chiave.

Script del flusso di dati

Sintassi

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

Esempio

L'esempio seguente è una trasformazione alter row denominata CleanData che accetta un flusso SpecifyUpsertConditions in ingresso e crea tre condizioni di modifica riga. Nella trasformazione precedente viene calcolata una colonna denominata alterRowCondition che determina se una riga viene inserita, aggiornata o eliminata nel database. Se il valore della colonna ha un valore stringa corrispondente alla regola di modifica riga, viene assegnato tale criterio.

Nell'interfaccia utente questa trasformazione è simile all'immagine seguente:

Alter row example

Lo script del flusso di dati per questa trasformazione si trova nel frammento di codice seguente:

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

Dopo la trasformazione Alter Row, è possibile eseguire il sink dei dati in un archivio dati di destinazione.