In dit artikel zal ik uitleggen hoe we gegevens van een Oracle-databasetabel kunnen opdelen en exporteren naar meerdere werkbladen van een Excel-bestand met behulp van het SQL Server-integratieservicepakket.
Vaak vroegen DBA's om ad-hocrapporten uit een database te genereren. Onlangs ben ik gevraagd om een rapport uit de database te genereren. Ze willen dat ik een rapport aanlever in meerdere werkbladen van een Excel-bestand. Er zijn verschillende manieren om dit te doen, maar de query was arbeidsintensief. Daarom wil ik met één uitvoering gegevens uit de database extraheren en besloot ik het SQL Server-integratieservicespakket te gebruiken. SQL Server-gegevenstools hebben één component genaamd Conditional Split Transformation die kan worden gebruikt om de taak te volbrengen.
Met behulp van SQL Server-gegevenstools kunnen we gegevens ophalen uit verschillende databaseplatforms met behulp van de ODBC-verbinding. De meeste databaseplatforms bieden hun connectiviteitsstuurprogramma's die kunnen worden gebruikt om een verbinding tussen applicatie en database te configureren.
Wat is voorwaardelijke gesplitste transformatie
De voorwaardelijke splitsingstransformatie kan gegevensrijen naar verschillende outputs routeren, afhankelijk van de inhoud van de gegevens. De implementatie van de Conditional Split-transformatie is als een CASE-beslissingsstructuur in een programmeertaal. Het evalueert uitdrukkingen en leidt op basis van de resultaten de gegevensrij naar de opgegeven uitvoer. Deze transformatie biedt ook een standaarduitvoer, zodat als een rij met geen enkele uitdrukking overeenkomt, deze naar de standaarduitvoer wordt geleid. (MSDN-referentie :https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/conditional-split-transformation?view=sql-server-2017).
Demo instellen
Ik heb Oracle 11g express edition op mijn computer geïnstalleerd. Ik heb een tabel gemaakt met de naam EMPLOYEESDATA in de HR schema van de XE database en voegde enkele dummy-records toe van de AdventureWorks2014 database.
De onderstaande code maakt een tabel aan:
MAAK TABEL "HR"."EMPLOYEE_DATA" ( "BusinessEntityID" NUMBER(*,0), "Title" NVARCHAR2(8), "FirstName" NVARCHAR2(50), "MiddleName" NVARCHAR2(50), "Achternaam" NVARCHAR2(50), "Suffix" NVARCHAR2(10), "JobTitle" NVARCHAR2(50), "PhoneNumber" NVARCHAR2(25), "PhoneNumberType" NVARCHAR2(50), "EmailAddress" NVARCHAR2(50), "EmailPromotion" NUMBER( *,0), "AddressLine1" NVARCHAR2(60), "AddressLine2" NVARCHAR2(60), "City" NVARCHAR2(30), "StateProvinceName" NVARCHAR2(50), "PostalCode" NVARCHAR2(15), "CountryRegionName" NVARCHAR2( 50) ) SEGMENT AANMAKEN ONMIDDELLIJK PCTVRIJ 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING OPSLAG (AANVANKELIJK 65536 VOLGENDE 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 FAFIFELOm Oracle-database te verbinden met SSDT, moeten we de Oracle-clientsoftware installeren. SQL Server-gegevenshulpmiddelen werken in de 32-bits modus, daarom moet de 32-bits versie van ODBC-stuurprogramma's voor Oracle worden geïnstalleerd. U kunt Oracle Client hier downloaden.
Ik heb een Excel-bestand gemaakt met de naam 'HRData.xls ’ met twee werkbladen genaamd Australië en Canada . Gegevens worden verdeeld op basis van de waarde van de CountryRegionName kolom. Als de kolomwaarde van de CountryRegionName kolom is Canada dan wordt het opgeslagen in de Canada werkblad en als de kolomwaarde van CountryRegionName is Australië dan wordt het opgeslagen in de Australië werkblad.
Omdat we allemaal weten hoe we een SSIS-pakket moeten maken, zal ik direct uitleggen hoe u een gegevensstroomtaak kunt maken.
Gegevensstroomtaak maken
In de taak Gegevensstroom gaan we de volgende drie componenten gebruiken:
- ADO.NET Source om gegevens uit de Oracle-database in te vullen.
- Voorwaardelijke splitsing om gegevens in meerdere sets te verdelen.
- Excel-bestemming met twee werkmappen genaamd "Australië" en "Canada".
ADO.NET-bron configureren
Slepen en neerzetten ADO.NET Source uitSSIS Toolbox naar de Gegevensstroom windows en noem het Werknemersgegevens zoals weergegeven in de volgende afbeelding:
Dubbelklik op Werknemersgegevens . De ADO.NET Bron-editor dialoogvenster wordt geopend. Hier hebben we nog geen verbinding gemaakt, vandaar de ADO.NET verbindingsmanager vervolgkeuzelijst is leeg. We maken een nieuwe verbinding. Klik hiervoor op Nieuw in dat dialoogvenster. Hierna verschijnt een ander dialoogvenster,Verbindingsbeheer configureren, wordt geopend zoals weergegeven in de onderstaande afbeelding:
In de ADO.NET Connection Manager configureren dialoogvenster, klik op Nieuw . Een ander dialoogvenster, Verbindingsbeheer , wordt geopend.
Standaard .Net Providers\SQLClient Data Provider wordt geselecteerd in de Provider vervolgkeuzelijst. Omdat we gegevens uit de Oracle-database vullen, selecteren we OracleClient Data Provider .
In Servernaam tekstvak, voer de naam of het IP-adres in van de server waarop Oracle 11g is geïnstalleerd. Gebruikersnaam en wachtwoord worden gebruikt om verbinding te maken met de Oracle-database. Ik had Oracle op mijn lokale VM geïnstalleerd, daarom wordt de servernaam localhost . Ik ga de database verbinden met behulp van de HR gebruiker, dus gebruikersnaam is HR . Geef het juiste wachtwoord op en klik op OK . Zie de volgende afbeelding:
Zodra de configuratie is voltooid, klikt u op Verbinding testen om de verbinding met de database te verifiëren en klik op OK.
We hebben de ADO.NET-verbindingsmanager geconfigureerd, daarom wordt de standaardverbindingsmanager automatisch geselecteerd in de ADO.NET-verbindingsmanager vervolgkeuzelijst. We gaan gegevens uit de tabel halen, selecteer daarom Tabel of Weergave in de vervolgkeuzelijst voor gegevenstoegangsmodus. Ik heb al de EMPLOYEESDATA . gemaakt tabel in de HR Schema van de Oracle-database, selecteer daarom HR.EmployeesData in denaam van de tabel of de weergave vervolgkeuzelijst zoals weergegeven in de onderstaande afbeelding:
Voorwaardelijke splitsing configureren
Om nu gegevens in verschillende werkbladen van Excel te exporteren op basis van een voorwaarde, gebruiken we de voorwaardelijke gesplitste transformatie. Sleep de voorwaardelijke splitsingscomponent van de SSIS toolbox naar deGegevensstroom venster zoals weergegeven in de onderstaande afbeelding.
Ik noemde eerder de uitvoer van gegevens van de HR.EmployeeData tabel wordt geëxporteerd in meerdere werkbladen op basis van de voorwaarde gedefinieerd in de Voorwaardelijke splitsing onderdeel.
Eerst zullen we de ADO.Net-bron verbinden met de voorwaardelijke gesplitste transformatie. Om dat te doen, klikt u op de blauwe pijl op het gegevensstroompad onderaan de Werknemersgegevens component en sleep het naar voorwaardelijke gesplitste transformatie zoals weergegeven in de onderstaande afbeelding.
Nu zullen we voorwaardelijke gesplitste transformatie configureren. Zoals ik eerder al zei, zullen we de gegevens van de HR.EmployeesData-tabel verdelen op basis van de waarde van de CountryRegionName kolom en sla ze op in verschillende werkbladen.
Dubbelklik hiervoor op Conditional Split Transformation Editor . De Conditional Split Transformation Editor dialoogvenster wordt geopend zoals weergegeven in de volgende afbeelding:
Zoals u in bovenstaande afbeelding kunt zien, heeft de editor voor voorwaardelijke gesplitste transformatie drie secties die bepalen hoe gegevens naar de volgende componenten worden gerouteerd.
Sectie A :In deze sectie, onder de Kolommen mappenlijst van de uitvoerkolommen, afgeleid van de ADO.Net-broncomponent, wordt weergegeven die kan worden gebruikt om voorwaarden te definiëren om de gegevens te splitsen.
Sectie B :In deze sectie worden verschillende functies vermeld die kunnen worden gebruikt om uitvoer in verschillende formaten te converteren en om voorwaarden te definiëren om gegevens te splitsen.
Sectie C :In deze sectie kunt u een voorwaarde maken die de uitvoer van de ADO.Net-bron in meerdere resultaatsets kan verdelen.
We zullen de voorwaarde toevoegen in Sectie-C. Vouw dus eerst het kolomknooppunt uit en sleep de CountryRegionName kolom (Sectie A) en plaats deze in het raster (Sectie C) zoals weergegeven in de volgende afbeelding:
Voor dit voorbeeld definiëren we onze voorwaarde op basis van de CountryRegionName kolom. Lijst met werknemers uit "Canada" wordt opgeslagen in het Excel-werkblad met de naam Canada en een lijst met werknemers uit Australië wordt opgeslagen in de Australië werkblad. Op basis van de voorwaarde gaan we de is gelijk aan (==) . gebruiken exploitant. De vergelijking is als volgt:
[CountryRegionName]=="Australië"[CountryRegionName]=="Canada"
Nadat de voorwaarden zijn gedefinieerd, klikt u op OK om het dialoogvenster op te slaan en te sluiten.
Excel-bestemming configureren
Nu we de gegevensstroom in meerdere paden hebben gesplitst, gaan we voor elk pad een bestemming toevoegen. Omdat we tabelgegevens in verschillende Excel-werkbladen gaan exporteren, moeten we twee Excel-bestemmingen maken. Om dat te doen, sleept u de Excel-verbinding vanuit SSIS Toolbox, zoals weergegeven in de afbeelding hieronder:
Dubbelklik op Excel-bestemming om de Excel-bestemming te configureren. De Excel-verbindingsmanager dialoogvenster wordt geopend. Klik in dat dialoogvenster op Nieuw zoals weergegeven in de volgende afbeelding:
Een ander dialoogvenster genaamd Excel Connection Manager zal openen. In dit dialoogvenster zullen we een pad geven waar het Excel-bestand zich bevindt. Ik heb de Werknemersgegevens . gemaakt bestand op mijn bureaublad. We gaan door het bestandssysteem en selecteren het bestand en klikken op OK zoals weergegeven in onderstaande afbeelding:
Nu, in de Gegevenstoegangsmodus vervolgkeuzelijst, selecteer Tabel of weergave en in de Naam van het Excel-blad vervolgkeuzelijst, selecteer Australië$, zoals weergegeven in de afbeelding hieronder:
Nu ga ik het gegevenspad configureren. Sleep hiervoor de blauwe gegevenspadpijl van de voorwaardelijke splitsingstransformatie naar de Australië-werknemers Excel-bestemmingscomponent. Wanneer u het gegevenspad verbindt met de Excel-bestemming, verschijnt er een dialoogvenster om te kiezen voor de uitvoer die we naar de geselecteerde bestemming willen leiden. Het dialoogvenster ziet er als volgt uit:
Het dialoogvenster bevat alle uitgangen in de vervolgkeuzelijst, die beschikbaar is via voorwaardelijke gesplitste transformatie. In dit geval bevat de vervolgkeuzelijst twee opties.
- Australië
- Canada
- Standaard uitvoer
Dubbelklik op de Excel-bestemmingscomponent om de tabelkolommen toe te wijzen aan de Excel-kolommen. Dubbelklik hiervoor op de Excel-bestemmingscomponent en in de Excel Destination Editor dialoogvenster, selecteer de Kaart optie in het linkerdeelvenster van het dialoogvenster, zoals weergegeven in de onderstaande afbeelding:
In de bovenstaande afbeelding,Invoerkolom is de kolomnaam van de Oracle-tabel en Bestemmingskolom zal de kolomnaam van het Excel-blad zijn. In deze demo zijn de kolomnaam van de tabel en het Excel-bestand hetzelfde. Dus Excel Destination Editor zal automatisch invoer- en uitvoerkolommen toewijzen.
Op dezelfde manier herhaal ik het configuratieproces van de gegevensstroom voor Canada gegevenspad.
- We moeten Canada selecteren in de Invoer Uitgang Selectie dialoogvenster, zoals weergegeven in de onderstaande afbeelding.
- In Excel Destination Edito r, selecteer Canada$ in de Naam van het Excel-blad vervolgkeuzelijst zoals weergegeven in de onderstaande afbeelding.
Zodra alle configuraties zijn voltooid, ziet de volledige gegevensstroomtaak er als volgt uit:
SSIS-pakket testen
Laten we nu het pakket uitvoeren en kijken hoe het werkte. Klik hiervoor op de Start knop op de menubalk. Als het pakket de uitvoering met succes voltooit, zou het er als volgt uit moeten zien:
Zoals de afbeelding hierboven aangeeft, heeft het pakket 1 record in de regio Australië geplaatst werkblad en 2 records in de regio Canada werkblad.
Samenvatting
In dit artikel hebben we een SSIS-pakket gemaakt met één gegevensstroom. We hebben een voorwaardelijke splitsingstransformatie aan de gegevensstroom toegevoegd om de gegevens in meerdere paden te splitsen. Vervolgens hebben we elk van die gegevenspaden naar verschillende Excel-werkbladen geleid.
Referenties :
Exporteer SQL-gegevens naar meerdere werkmappen van een Excel-bestand.
Handige hulpmiddelen:
Devart SSIS Data Flow Components – hiermee kunt u database- en cloudgegevens integreren via SQL Server Integration Services.
Devart ODBC-stuurprogramma's - bieden hoogwaardige en veelzijdige connectiviteitsoplossingen voor op ODBC gebaseerde toepassingen.