I denne artikel vil jeg forklare, hvordan vi kan opdele og eksportere data fra en Oracle-databasetabel til flere regneark i en Excel-fil ved hjælp af SQL Server-integrationsservicepakken.
Ofte bad DBA'er om at generere Ad-Hoc rapporter fra en database. For nylig er jeg blevet bedt om at generere en rapport fra databasen. De vil have mig til at levere en rapport i flere regneark i en Excel-fil. Der er forskellige måder at gøre det på, men forespørgslen var ressourcekrævende. Derfor vil jeg udtrække data fra databasen med én udførelse og besluttede at bruge SQL Server-integrationsservicepakken. SQL Server-dataværktøjer har én komponent kaldet Conditional Split Transformation som kan bruges til at nå opgaven.
Ved hjælp af SQL Server-dataværktøjer kan vi hente data fra forskellige databaseplatforme ved at bruge ODBC-forbindelsen. De fleste af databaseplatformene leverer deres forbindelsesdrivere, som kan bruges til at konfigurere en forbindelse mellem applikation og database.
Hvad er betinget splittransformation
Conditional Split-transformationen kan dirigere datarækker til forskellige output afhængigt af indholdet af dataene. Implementeringen af Conditional Split-transformationen er som en CASE-beslutningsstruktur i et programmeringssprog. Den evaluerer udtryk og leder på baggrund af resultaterne datarækken til det specificerede output. Denne transformation giver også et standardoutput, så hvis en række ikke matcher noget udtryk, dirigeres den til standardoutputtet. (MSDN-reference :https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/conditional-split-transformation?view=sql-server-2017) .
Demoopsætning
Jeg har installeret Oracle 11g express edition på min maskine. Jeg har oprettet en tabel kaldet EMPLOYEESDATA i HR skema for XE database og tilføjede nogle dummy-poster fra AdventureWorks2014 database.
Koden nedenfor vil oprette en tabel:
OPRET TABEL "HR"."EMPLOYEE_DATA" ( "BusinessEntityID" NUMMER(*,0), "Titel" NVARCHAR2(8), "FirstName" NVARCHAR2(50), "MiddleName" NVARCHAR2(50), "Efternavn" NVARCHAR2(50), "Suffix" NVARCHAR2(10), "JobTitel" NVARCHAR2(50), "PhoneNumber" NVARCHAR2(25), "PhoneNumberType" NVARCHAR2(50), "EmailAddress" NVARCHAR2(50), "EmailPromotion" NUMMER( *,0), "AddressLine1" NVARCHAR2(60), "AddressLine2" NVARCHAR2(60), "City" NVARCHAR2(30), "StateProvinceName" NVARCHAR2(50), "PostalCode" NVARCHAR2(15), "CountryRegionName" NVARCHAR2( 50)) Segmentoprettelse Umiddelbar PCTFREE 10 PCTUSHED 40 Initrans 1 MaxTrans 255 Nocompress Logging Storage (indledende 65536 Næste 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREADE 0 Freelists 1 Freelist GroupFor at forbinde Oracle-databasen ved hjælp af SSDT, skal vi installere Oracle-klientsoftwaren. SQL Server-dataværktøjer fungerer i 32-bit-tilstand, og derfor bør 32-bit-versionen af ODBC-drivere til Oracle være installeret. Du kan downloade Oracle Client herfra.
Jeg har oprettet en Excel-fil kaldet 'HRData.xls ’, der har to regneark kaldet Australien og Canada . Data vil blive opdelt baseret på værdien af CountryRegionName kolonne. Hvis kolonneværdien for CountryRegionName kolonnen er Canada så vil det blive gemt i Canada regneark og hvis kolonneværdien CountryRegionName er Australien så vil det blive gemt i Australien arbejdsark.
Da vi alle ved, hvordan man opretter en SSIS-pakke, vil jeg direkte forklare, hvordan man opretter en dataflow-opgave.
Opret dataflowopgave
I Dataflow-opgaven skal vi bruge følgende tre komponenter:
- ADO.NET-kilde til at udfylde data fra Oracle-databasen.
- Betinget opdeling for at opdele data i flere sæt.
- Excel-destination med to projektmapper kaldet "Australien" og "Canada".
Konfigurer ADO.NET-kilde
Træk og slip ADO.NET-kilde fra SSIS Toolbox til Dataflow vinduer og navngiv det Medarbejderdata som vist på følgende billede:
Dobbeltklik på Medarbejderdata . ADO.NET-kildeeditoren dialogboksen åbnes. Her har vi ikke oprettet nogen forbindelse endnu, derfor ADO.NET-forbindelsesadministratoren rullemenuen er tom. Vi vil skabe en ny forbindelse. For at gøre det skal du klikke på Ny i den dialogboks. Efter dette, en anden dialogboks,Konfigurer forbindelseshåndtering, åbnes som vist på billedet nedenfor:
I Konfigurer ADO.NET Connection Manager dialogboksen skal du klikke på Ny . En anden dialogboks, Connection Manager , åbnes.
Som standard er .Net Providers\SQLClient Data Provider vil blive valgt i Udbyder drop-down boks. Da vi udfylder data fra Oracle-databasen, vælger vi OracleClient Data Provider .
I Servernavn tekstboks skal du indtaste navnet eller IP-adressen på den server, hvorpå Oracle 11g er installeret. Brugernavn og adgangskode vil blive brugt til at forbinde Oracle-databasen. Jeg havde installeret Oracle på min lokale VM, derfor vil servernavnet være localhost . Jeg vil forbinde databasen ved hjælp af HR bruger, derfor vil brugernavnet være HR . Angiv den passende adgangskode, og klik på OK . Se følgende billede:
Når konfigurationen er fuldført, skal du klikke på Test forbindelse for at bekræfte forbindelsen til databasen, og klik på OK.
Vi har konfigureret ADO.NET-forbindelsesadministratoren, så standardforbindelsesadministratoren vil automatisk blive valgt i ADO.NET Connection Manager rullemenuen. Vi vil hente data fra tabellen, og vælg derfor Tabel eller Vis i rullemenuen til dataadgangstilstand. Jeg har allerede oprettet EMPLOYEESDATA tabellen i HR Skema for Oracle-databasen, vælg derfor HR.EmployeesData i Navnet på tabellen eller visningen rullemenu som vist på billedet nedenfor:
Konfigurer betinget opdeling
For nu at eksportere data i forskellige regneark i Excel baseret på en betingelse, vil vi bruge den betingede opdelte transformation. Træk den betingede opdelingskomponent fra SSIS værktøjskassen tildataflowet vindue som vist på billedet nedenfor.
Jeg nævnte tidligere, output af data fraHR.EmployeeData tabel vil blive eksporteret i flere regneark baseret på betingelsen defineret i Betinget opdeling komponent.
Først vil vi forbinde ADO.Net source til Conditional split transformation. For at gøre det skal du klikke på den blå pil på dataflowstien nederst på Medarbejderdata komponent og træk den til betinget opdelt transformation som vist på billedet nedenfor.
Nu vil vi konfigurere betinget split transformation. Som jeg nævnte tidligere, vil vi opdele data fra HR.EmployeesData-tabellen baseret på værdien af CountryRegionName kolonne og gem dem i forskellige arbejdsark.
For at gøre dette skal du dobbeltklikke på Conditional Split Transformation Editor . Betinget Split Transformation Editor dialogboksen åbnes som vist på følgende billede:
Som du kan se på ovenstående billede, har betinget opdelt transformationseditor tre sektioner, som bestemmer, hvordan data vil blive dirigeret til de næste komponenter.
Sektion A :I denne sektion under Kolonner mappeliste over outputkolonner, afledt af ADO.Net-kildekomponenten, vil blive vist, som kan bruges til at definere betingelser for at opdele dataene.
Sektion B :I dette afsnit vil forskellige funktioner blive listet op, som kan bruges til at konvertere output i det forskellige format og bruges til at definere betingelser for opdeling af data.
Sektion C :I dette afsnit kan du oprette en betingelse, der kan opdele output fra ADO.Net-kilden i flere resultatsæt.
Vi tilføjer betingelsen i afsnit-C. Så udvid først kolonnenoden og træk CountryRegionName kolonne (afsnit A) og slip den i gitteret (afsnit C) som vist på følgende billede:
For dette eksempel vil vi definere vores tilstand baseret på CountryRegionName kolonne. Liste over medarbejdere fra "Canada" vil blive gemt i Excel-regnearket med navnet Canada og en liste over medarbejdere fra Australien vil blive gemt i Australien arbejdsark. Baseret på betingelsen vil vi bruge er lig med (==) operatør. Ligningen vil være som følgende:
[CountryRegionName]=="Australien"[CountryRegionName]=="Canada"
Når betingelserne er defineret, skal du klikke på OK for at gemme og lukke dialogboksen.
Konfiguration af Excel-destination
Nu hvor vi har opdelt dataflow i flere stier, vil vi tilføje en destination for hver sti. Da vi skal eksportere tabeldata i forskellige Excel-regneark, skal vi oprette to Excel-destinationer. For at gøre det skal du trække og slippe Excel-forbindelsen fra SSIS Toolbox, som vist på billedet nedenfor:
For at konfigurere excel-destination skal du dobbeltklikke på Excel-destination. Excel-forbindelsesadministratoren dialogboksen åbnes. Klik på Ny i den dialogboks som vist på følgende billede:
En anden dialogboks kaldet Excel Connection Manager vil åbne. I denne dialogboks vil vi angive en sti, hvor Excel-filen er placeret. Jeg har oprettet Medarbejderdata fil på mit skrivebord. Vi vil gennemgå filsystemet og vælge filen og klikke på OK som vist på billedet nedenfor:
Nu i Dataadgangstilstand rullemenuen, vælg Tabel eller visning og i Navn på Excel-arket rullemenuen, vælg Australia$, som vist på billedet nedenfor:
Nu skal jeg konfigurere datastien. For at gøre det skal du trække den blå datastipil fra den betingede splittransformation tilaustralske medarbejdere excel destinationskomponent. Når du forbinder datastien til Excel-destination, vises en dialogboks for at vælge at output, vi ønsker at dirigere mod den valgte destination. Dialogboksen vil se således ud:
Dialogboksen inkluderer alle output i rullelisten, som er tilgængelig fra betinget split transformation. I dette tilfælde vil rullelisten indeholde to muligheder.
- Australien
- Canada
- Standardoutput
Dobbeltklik på excel-destinationskomponenten for at tilknytte tabelkolonnerne med Excel-kolonnerne. For at gøre det skal du dobbeltklikke på Excel-destinationskomponenten og i Excel-destinationseditoren dialogboksen skal du vælge Mapping mulighed placeret i venstre rude i dialogboksen, som vist på billedet nedenfor:
I ovenstående billede,Indtastningskolonne er kolonnenavnet på Oracle-tabellen og Destinationskolonnen vil være kolonnenavnet på Excel-arket. I denne demo er kolonnenavnet på tabellen og Excel-filen det samme. Så Excel Destination Editor vil automatisk kortlægge input- og outputkolonner.
På samme måde vil jeg gentage dataflow-konfigurationsprocessen for Canada datasti.
- Vi skal vælge Canada i Input Output Selection dialogboks, som vist på billedet nedenfor.
- I Excel-destinationsredigering r, vælg Canada$ i Navn på Excel-arket rullemenu som vist på billedet nedenfor.
Når alle konfigurationer er gennemført, vil hele dataflowopgaven se sådan ud:
Test af SSIS-pakke
Lad os nu køre pakken og se, hvordan den fungerede. For at gøre det skal du klikke på Start knappen på menulinjen. Hvis pakken fuldfører eksekveringen med succes, skulle den se sådan ud:
Som billedet ovenfor angiver, indsatte pakken 1 post iAustralien-regionen regneark og 2 poster i Canada-regionen arbejdsark.
Oversigt
I denne artikel oprettede vi en SSIS-pakke med et enkelt dataflow. Vi tilføjede en betinget split-transformation til datastrømmen for at opdele dataene i flere stier. Vi dirigerede derefter hver af disse datastier til forskellige excel-regneark.
Referencer :
Eksporter SQL-data til flere projektmapper i en excel-fil.
Nyttige værktøjer:
Devart SSIS Data Flow Components – giver dig mulighed for at integrere database- og clouddata via SQL Server Integration Services.
Devart ODBC-drivere – leverer højtydende og funktionsrige tilslutningsløsninger til ODBC-baserede applikationer.