Rijtransformatie wijzigen in toewijzingsgegevensstroom

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

Gegevensstromen zijn beschikbaar in Zowel Azure Data Factory als Azure Synapse Pipelines. Dit artikel is van toepassing op toewijzingsgegevensstromen. Als u geen ervaring hebt met transformaties, raadpleegt u het inleidende artikel Gegevens transformeren met behulp van een toewijzingsgegevensstroom.

Gebruik de transformatie Rij wijzigen om beleidsregels voor invoegen, verwijderen, bijwerken en upsert in te stellen voor rijen. U kunt een-op-veel-voorwaarden toevoegen als expressies. Deze voorwaarden moeten worden opgegeven in volgorde van prioriteit, omdat elke rij wordt gemarkeerd met het beleid dat overeenkomt met de eerste overeenkomende expressie. Elk van deze voorwaarden kan ertoe leiden dat een rij (of rijen) wordt ingevoegd, bijgewerkt, verwijderd of geupert. Alter Row kan beide DDL- en DML-acties produceren voor uw database.

Alter row settings

Het wijzigen van rijtransformaties werkt alleen op database-, REST- of Azure Cosmos DB-sinks in uw gegevensstroom. De acties die u toewijst aan rijen (invoegen, bijwerken, verwijderen, upsert) worden niet uitgevoerd tijdens foutopsporingssessies. Voer een execute Gegevensstroom-activiteit uit in een pijplijn om het beleid voor het wijzigen van rijen in uw databasetabellen uit te voeren.

Notitie

Er is geen wijzigingsrijtransformatie nodig voor Gegevensopnamestromen wijzigen die gebruikmaken van systeemeigen CDC-bronnen, zoals SQL Server of SAP. In deze gevallen detecteert ADF automatisch de rijmarkering, zodat beleid voor alter row onnodig is.

Een standaardrijbeleid opgeven

Maak een wijzigingsrijtransformatie en geef een rijbeleid op met een voorwaarde van true(). Elke rij die niet overeenkomt met een van de eerder gedefinieerde expressies, wordt gemarkeerd voor het opgegeven rijbeleid. Standaard wordt elke rij die niet overeenkomt met een voorwaardelijke expressie gemarkeerd voor Insert.

Alter row policy

Notitie

Als u alle rijen met één beleid wilt markeren, kunt u een voorwaarde voor dat beleid maken en de voorwaarde opgeven als true().

Beleidsregels weergeven in de voorbeeldweergave van gegevens

Gebruik de foutopsporingsmodus om de resultaten van het beleid voor het wijzigen van rijen weer te geven in het deelvenster Gegevensvoorbeeld. Een voorbeeld van gegevens van een transformatie van een wijzigingsrij produceert geen DDL- of DML-acties voor uw doel.

Alter row policies

Elk beleid voor het wijzigen van rijen wordt vertegenwoordigd door een pictogram dat aangeeft of een actie invoegen, bijwerken, upsert of verwijderd wordt. De bovenste koptekst laat zien hoeveel rijen worden beïnvloed door elk beleid in de preview.

Beleid voor wijzigen van rij toestaan in sink

De gegevensstroom moet naar een database of Azure Cosmos DB-sink schrijven om het beleid voor het wijzigen van rijen te laten werken. Schakel op het tabblad Instellingen in uw sink in welke rijbeleidsregels zijn toegestaan voor die sink.

Alter row sink

Het standaardgedrag is om alleen invoegingen toe te staan. Als u updates, upserts of verwijderingen wilt toestaan, schakelt u het selectievakje in de sink in die overeenkomt met die voorwaarde. Als updates, upserts of verwijderingen zijn ingeschakeld, moet u opgeven welke sleutelkolommen in de sink overeenkomen.

Notitie

Als uw invoegingen, updates of upserts het schema van de doeltabel in de sink wijzigen, mislukt de gegevensstroom. Als u het doelschema in uw database wilt wijzigen, kiest u Tabel opnieuw maken als tabelactie. Hiermee wordt de tabel verwijderd en opnieuw gemaakt met de nieuwe schemadefinitie.

Voor de sinktransformatie is één sleutel of een reeks sleutels vereist voor unieke rijidentificatie in uw doeldatabase. Voor SQL-sinks stelt u de sleutels in op het tabblad Sink-instellingen. Stel voor Azure Cosmos DB de partitiesleutel in de instellingen in en stel ook het azure Cosmos DB-systeemveld 'id' in uw sinktoewijzing in. Voor Azure Cosmos DB is het verplicht om de systeemkolom 'id' op te nemen voor updates, upserts en verwijderingen.

Samenvoegen en upserts met Azure SQL Database en Azure Synapse

Gegevensstroom biedt ondersteuning voor samenvoegingen voor Azure SQL Database en Azure Synapse-databasegroep (datawarehouse) met de upsert-optie.

U kunt echter scenario's tegenkomen waarin uw doeldatabaseschema gebruikmaakte van de identiteitseigenschap van sleutelkolommen. Voor de service moet u de sleutels identificeren die u gaat gebruiken om de rijwaarden voor updates en upserts te vinden. Als voor de doelkolom echter de id-eigenschap is ingesteld en u het upsert-beleid gebruikt, kunt u met de doeldatabase niet naar de kolom schrijven. U kunt ook fouten tegenkomen wanneer u probeert een upsert uit te voeren op de distributiekolom van een gedistribueerde tabel.

Hier volgen manieren om dit op te lossen:

  1. Ga naar de Sink-transformatie Instellingen en stel 'Schrijfsleutelkolommen overslaan' in. Hiermee geeft de service aan dat de kolom die u hebt geselecteerd niet als de sleutelwaarde voor uw toewijzing moet schrijven.

  2. Als deze sleutelkolom niet de kolom is die het probleem veroorzaakt voor identiteitskolommen, kunt u de SQL-optie voor de sinktransformatie gebruiken: SET IDENTITY_INSERT tbl_content ON Schakel deze vervolgens uit met de SQL-eigenschap na verwerking: SET IDENTITY_INSERT tbl_content OFF.

  3. Voor zowel de identiteitscase als de distributiekolomcase kunt u de logica van Upsert omzetten in een afzonderlijke updatevoorwaarde en een afzonderlijke invoegvoorwaarde met behulp van een transformatie voor voorwaardelijke splitsing. Op deze manier kunt u de toewijzing instellen op het updatepad om de sleutelkolomtoewijzing te negeren.

Script voor gegevensstroom

Syntaxis

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

Opmerking

Het onderstaande voorbeeld is een wijzigingsrijtransformatie met de naam CleanData die een binnenkomende stroom SpecifyUpsertConditions gebruikt en drie voorwaarden voor de rij wijzigt. In de vorige transformatie wordt een kolom met de naam alterRowCondition berekend waarmee wordt bepaald of een rij wordt ingevoegd, bijgewerkt of verwijderd in de database. Als de waarde van de kolom een tekenreekswaarde heeft die overeenkomt met de regel voor het wijzigen van rijen, wordt dat beleid toegewezen.

In de gebruikersinterface ziet deze transformatie eruit als in de onderstaande afbeelding:

Alter row example

Het gegevensstroomscript voor deze transformatie bevindt zich in het onderstaande codefragment:

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

Na de transformatie Van rij wijzigen wilt u mogelijk uw gegevens naar een doelgegevensarchief sinken.