Oefening: een langzaam veranderende dimensie van type 1 ontwerpen en implementeren met toewijzingsgegevensstromen
In deze oefening maakt u een gegevensstroom voor een SCD van het type 1 met behulp van een toegewezen SQL-pool van Azure Synapse als de bron en het doel. Deze gegevensstroom kan vervolgens worden toegevoegd aan een Synapse-pijplijn en worden uitgevoerd als onderdeel van het ETL-proces (extract, transform, load).
Bron- en dimensietabel instellen
Voor deze oefening wilt u een dimensietabel in Azure Synapse laden op basis van brongegevens die afkomstig kunnen zijn van veel verschillende systeemtypen, zoals Azure SQL, Azure Storage, enzovoort. In dit voorbeeld houdt u het eenvoudig door de brongegevens in uw Azure Synapse-database te maken.
Navigeer vanuit Synapse Studio naar de datahub .
Selecteer het tabblad Werkruimte (1), vouw Databases uit en klik met de rechtermuisknop op SQLPool01 (2). Selecteer Nieuw SQL-script (3) en selecteer vervolgens Leeg script (4).
Plak het volgende script in het lege scriptvenster en selecteer Vervolgens Uitvoeren of hit
F5
om de query uit te voeren:CREATE TABLE [dbo].[CustomerSource] ( [CustomerID] [int] NOT NULL, [Title] [nvarchar](8), [FirstName] [nvarchar](50), [MiddleName] [nvarchar](50), [LastName] [nvarchar](50), [Suffix] [nvarchar](10), [CompanyName] [nvarchar](128), [SalesPerson] [nvarchar](256), [EmailAddress] [nvarchar](50), [Phone] [nvarchar](25) ) WITH ( HEAP ) COPY INTO [dbo].[CustomerSource] FROM 'https://solliancepublicdata.blob.core.windows.net/dataengineering/dp-203/awdata/CustomerSource.csv' WITH ( FILE_TYPE='CSV', FIELDTERMINATOR='|', FIELDQUOTE='', ROWTERMINATOR='0x0a', ENCODING = 'UTF16' ) CREATE TABLE dbo.[DimCustomer]( [CustomerID] [int] NOT NULL, [Title] [nvarchar](8) NULL, [FirstName] [nvarchar](50) NOT NULL, [MiddleName] [nvarchar](50) NULL, [LastName] [nvarchar](50) NOT NULL, [Suffix] [nvarchar](10) NULL, [CompanyName] [nvarchar](128) NULL, [SalesPerson] [nvarchar](256) NULL, [EmailAddress] [nvarchar](50) NULL, [Phone] [nvarchar](25) NULL, [InsertedDate] [datetime] NOT NULL, [ModifiedDate] [datetime] NOT NULL, [HashKey] [char](64) ) WITH ( DISTRIBUTION = REPLICATE, CLUSTERED COLUMNSTORE INDEX )
Een toewijzingsgegevensstroom maken
Toewijzingsgegevensstromen zijn pijplijnactiviteiten die een visuele manier bieden om gegevens te transformeren, via een codevrije ervaring. Vervolgens maakt u een toewijzingsgegevensstroom om een SCD van type 1 te maken.
Navigeer naar de ontwikkelhub .
Selecteer +en selecteer vervolgens Gegevensstroom.
Voer
UpdateCustomerDimension
in het eigenschappenvenster van de nieuwe gegevensstroom het veld Naam (1) in en selecteer vervolgens de knop Eigenschappen (2) om het eigenschappenvenster te verbergen.Selecteer Bron toevoegen op het canvas.
Configureer onder
Source settings
de volgende eigenschappen:- Naam van uitvoerstroom: Enter
SourceDB
- Brontype: Selecteren
Dataset
- Opties: De
Allow schema drift
andere opties controleren en verlaten uitgeschakeld - Steekproeven: Selecteren
Disable
- Gegevensset: Selecteer + Nieuw om een nieuwe gegevensset te maken
- Naam van uitvoerstroom: Enter
Selecteer Azure Synapse Analytics in het dialoogvenster nieuwe integratiegegevensset en selecteer vervolgens Doorgaan.
Configureer het volgende in de eigenschappen van de gegevensset:
- Naam: Enter
CustomerSource
- Gekoppelde service: Selecteer de gekoppelde Synapse-werkruimteservice
- Tabelnaam: Selecteer de knop Vernieuwen naast de vervolgkeuzelijst
- Naam: Enter
Voer in het veld Waarde de naam van uw SQL-pool in en selecteer VERVOLGENS OK.
Selecteer
dbo.CustomerSource
onder Tabelnaam, selecteerFrom connection/store
onder Schema importeren en selecteer VERVOLGENS OK om de gegevensset te maken.Selecteer Openen naast de
CustomerSource
gegevensset die u hebt toegevoegd.Voer de naam van uw SQL-pool in het veld Waarde naast
DBName
.Selecteer in de gegevensstroomeditor het vak Bron toevoegen onder de BronDB-activiteit. Configureer deze bron als de tabel DimCustomer volgens dezelfde stappen die worden gebruikt voor CustomerSource.
- Naam van uitvoerstroom: Enter
DimCustomer
- Brontype: Selecteren
Dataset
- Opties: De
Allow schema drift
andere opties controleren en verlaten uitgeschakeld - Steekproeven: Selecteren
Disable
- Gegevensset: Selecteer + Nieuw om een nieuwe gegevensset te maken. Gebruik de gekoppelde Azure Synapse-service en kies de tabel DimCustomer. Zorg ervoor dat u de DBName instelt op de naam van uw SQL-pool.
- Naam van uitvoerstroom: Enter
Transformaties toevoegen aan gegevensstroom
Selecteer + rechts van de
SourceDB
bron op het canvas en selecteer vervolgens Afgeleide kolom.Configureer onder
Derived column's settings
de volgende eigenschappen:- Naam van uitvoerstroom: Enter
CreateCustomerHash
- Binnenkomende stroom: selecteren
SourceDB
- Kolommen: Voer het volgende in:
Kolom Expression Beschrijving Typen HashKey
sha2(256, iifNull(Title,'') +FirstName +iifNull(MiddleName,'') +LastName +iifNull(Suffix,'') +iifNull(CompanyName,'') +iifNull(SalesPerson,'') +iifNull(EmailAddress,'') +iifNull(Phone,''))
Hiermee maakt u een SHA256-hash van de tabelwaarden. We gebruiken dit om rijwijzigingen te detecteren door de hash van de binnenkomende records te vergelijken met de hash-waarde van de doelrecords, die overeenkomen met de CustomerID
waarde. DeiifNull
functie vervangt null-waarden door lege tekenreeksen. Anders worden de hashwaarden vaak gedupliceerd wanneer null-vermeldingen aanwezig zijn.- Naam van uitvoerstroom: Enter
Selecteer + rechts van de
CreateCustomerHash
afgeleide kolom op het canvas en selecteer Vervolgens Bestaat.Configureer onder
Exists settings
de volgende eigenschappen:- Naam van uitvoerstroom: Enter
Exists
- Linkerstream: Selecteren
CreateCustomerHash
- Rechterstream: Selecteren
SynapseDimCustomer
- Type bestaan: selecteren
Doesn't exist
- Bestaat voorwaarden: Stel het volgende in voor links en rechts:
Links: De kolom CreateCustomerHash Rechts: Kolom SynapseDimCustomer HashKey
HashKey
- Naam van uitvoerstroom: Enter
Selecteer + rechts van
Exists
het canvas en selecteer Opzoeken.Configureer onder
Lookup settings
de volgende eigenschappen:- Naam van uitvoerstroom: Enter
LookupCustomerID
- Primaire stream: selecteren
Exists
- Opzoekstroom: Selecteren
SynapseDimCustomer
- Overeenkomen met meerdere rijen: Uitgeschakeld
- Overeenkomst op: selecteren
Any row
- Opzoekvoorwaarden: Stel het volgende in voor links en rechts:
Links: De kolom bestaat Rechts: Kolom SynapseDimCustomer CustomerID
CustomerID
- Naam van uitvoerstroom: Enter
Selecteer + rechts van
LookupCustomerID
het canvas en selecteer vervolgens Afgeleide kolom.Configureer onder
Derived column's settings
de volgende eigenschappen:- Naam van uitvoerstroom: Enter
SetDates
- Binnenkomende stroom: selecteren
LookupCustomerID
- Kolommen: Voer het volgende in:
Kolom Expression Beschrijving InsertedDate
selectereniif(isNull(InsertedDate), currentTimestamp(), {InsertedDate})
Als de InsertedDate
waarde null is, voegt u de huidige tijdstempel in. Gebruik anders deInsertedDate
waarde.ModifiedDate
selecterencurrentTimestamp()
Werk de ModifiedDate
waarde altijd bij met de huidige tijdstempel.Notitie
Als u de tweede kolom wilt invoegen, selecteert u + Toevoegen boven de lijst Kolommen en selecteert u vervolgens Kolom toevoegen.
- Naam van uitvoerstroom: Enter
Selecteer + rechts van de
SetDates
stap afgeleide kolom op het canvas en selecteer Vervolgens Rij wijzigen.Configureer onder
Alter row settings
de volgende eigenschappen:- Naam van uitvoerstroom: Enter
AllowUpserts
- Binnenkomende stroom: selecteren
SetDates
- Rijvoorwaarden wijzigen: Voer het volgende in:
Conditie Expression Beschrijving Upsert if
selecterentrue()
Stel de voorwaarde true()
in op deUpsert if
voorwaarde om upserts toe te staan. Dit zorgt ervoor dat alle gegevens die de stappen in de toewijzingsgegevensstroom doorlopen, worden ingevoegd of bijgewerkt in de sink.- Naam van uitvoerstroom: Enter
Selecteer + rechts van de
AllowUpserts
stap Rij wijzigen op het canvas en selecteer Vervolgens Sink.Configureer onder
Sink
de volgende eigenschappen:- Naam van uitvoerstroom: Enter
Sink
- Binnenkomende stroom: selecteren
AllowUpserts
- Sinktype: Selecteren
Dataset
- Gegevensset: selecteren
DimCustomer
- Opties: Controleren
Allow schema drift
en uitschakelenValidate schema
- Naam van uitvoerstroom: Enter
Selecteer het tabblad Instellingen en configureer de volgende eigenschappen:
- Methode Bijwerken: alle andere opties controleren
Allow upsert
en uitschakelen - Sleutelkolommen: Selecteren
List of columns
en vervolgens selecterenCustomerID
in de lijst - Tabelactie: Selecteren
None
- Fasering inschakelen: uitgeschakeld
- Methode Bijwerken: alle andere opties controleren
Selecteer het tabblad Toewijzing en schakel automatisch toewijzen uit. Configureer de toewijzing van invoerkolommen zoals hieronder wordt beschreven:
Invoerkolommen Uitvoerkolommen SourceDB@CustomerID
CustomerID
SourceDB@Title
Title
SourceDB@FirstName
FirstName
SourceDB@MiddleName
MiddleName
SourceDB@LastName
LastName
SourceDB@Suffix
Suffix
SourceDB@CompanyName
CompanyName
SourceDB@SalesPerson
SalesPerson
SourceDB@EmailAddress
EmailAddress
SourceDB@Phone
Phone
InsertedDate
InsertedDate
ModifiedDate
ModifiedDate
CreateCustomerHash@HashKey
HashKey
De voltooide toewijzingsstroom moet er als volgt uitzien. Selecteer Alles publiceren om uw wijzigingen op te slaan.
Selecteer Publiceren.
De gegevensstroom testen
U hebt een SCD-gegevensstroom van type 1 voltooid. Als u ervoor kiest om deze te testen, kunt u deze gegevensstroom toevoegen aan een Synapse-integratiepijplijn. Vervolgens kunt u de pijplijn eenmaal uitvoeren om de initiƫle belasting van de gegevens van de klantbron naar de DimCustomer-bestemming uit te voeren.
Elke extra uitvoering van de pijplijn vergelijkt de gegevens in de brontabel met wat zich al in de dimensietabel bevindt (met behulp van de HashKey) en alleen records bijwerken die zijn gewijzigd. Als u dit wilt testen, kunt u een record in de brontabel bijwerken en vervolgens de pijplijn opnieuw uitvoeren en de recordupdates in de dimensietabel controleren.
Neem de klant Janet Gates als voorbeeld. De eerste belasting toont de LastName
poort en de CustomerId
is 4.
Hier volgt een voorbeeldinstructie waarmee de achternaam van de klant in de brontabel wordt bijgewerkt.
UPDATE [dbo].[CustomerSource]
SET LastName = 'Lopez'
WHERE [CustomerId] = 4
Na het bijwerken van de record en het uitvoeren van de pijplijn zou DimCustomer deze bijgewerkte gegevens weergeven.
De klantrecord heeft de waarde bijgewerkt zodat deze LastName
overeenkomt met de bronrecord en de ModifiedDate
, zonder de oude LastName
waarde bij te houden. Dat is het verwachte gedrag voor een SCD van type 1. Als de geschiedenis vereist was voor het LastName
veld, wijzigt u de tabel en gegevensstroom in een van de andere SCD-typen die u hebt geleerd.