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 is 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.
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 Gegevensstroom-activiteit uitvoeren in een pijplijn om het beleid voor het wijzigen van rijbeleid 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
.
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 gegevensvoorbeeld van een wijzigingsrijtransformatie produceert geen DDL- of DML-acties voor uw doel.
Een pictogram voor elk beleid voor het wijzigen van rijen geeft aan of er een actie voor invoegen, bijwerken, upsert of verwijderd wordt uitgevoerd. De bovenste koptekst laat zien hoeveel rijen elk beleid beïnvloedt 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.
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 het doeldatabaseschema gebruikmaakte van de identiteitseigenschap van sleutelkolommen. Voor de service moet u de sleutels identificeren die u gebruikt om de rijwaarden voor updates en upserts te vinden. Maar als voor de doelkolom de id-eigenschap is ingesteld en u het upsert-beleid gebruikt, staat de doeldatabase u niet toe naar de kolom te 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:
Ga naar de sinktransformatie-instellingen en stel 'Schrijfsleutelkolommen overslaan' in. Hiermee wordt aan de service aangegeven dat de kolom die u hebt geselecteerd als de sleutelwaarde voor de toewijzing niet schrijft.
Als die 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
.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:
Het gegevensstroomscript voor deze transformatie bevindt zich in het onderstaande codefragment:
SpecifyUpsertConditions alterRow(insertIf(alterRowCondition == 'insert'),
updateIf(alterRowCondition == 'update'),
deleteIf(alterRowCondition == 'delete')) ~> AlterRow
Gerelateerde inhoud
Na de transformatie Van rij wijzigen wilt u mogelijk uw gegevens naar een doelgegevensarchief sinken.