Skip to content
Slides & Docs
Main Navigation
Home
Resources
Software Dev
Web Dev
Return to top
On this page
DFU 05, Data Warehouse
# DFU 05 ## Data Warehouse --- ### Hvad er Data Warehouse? ---- <div class="grid"> <div> - Et Data Warehouse (DW) er en centraliseret database, der bruges til at samle, lagre og analysere store mængder data fra forskellige kilder. <!-- .element class="fragment" --> - Det er designet til at understøtte beslutningstagning og forretningsanalyse ved at give et samlet overblik over virksomhedens data. <!-- .element class="fragment" --> - Data Warehouse adskiller sig fra traditionelle databaser ved at være optimeret til læseoperationer og komplekse forespørgsler snarere end transaktionelle operationer. <!-- .element class="fragment" --> </div> <div>  </div> </div> ---- ### Datawarehouse termet > A data warehouse is a subject oriented, integrated, time-variant, and non-volatile collection of data. Termet Data Warehouse, af Bill Inmon, 1990 ---- ### Egenskaber ved Data Warehouse - **Subject Oriented** - Data er organiseret omkring nøgleemner som kunder, produkter eller salg frem for applikationer eller processer <!-- .element class="fragment" --> - **Integrated** - Data fra forskellige kilder er konsolideret og standardiseret for at sikre konsistens og pålidelighed <!-- .element class="fragment" --> - **Time-variant** - Data lagres over tid, hvilket muliggør historisk analyse og trendidentifikation <!-- .element class="fragment" --> - **Non-volatile** - Data i et Data Warehouse ændres ikke efter indlæsning, hvilket sikrer dataintegritet og stabilitet <!-- .element class="fragment" --> ---- ### Database vs. Data Warehouse | Egenskab | **Operationel database**<br>Online Transaction Processing (OLTP) | **Data Warehouse**<br>Online Analytical Processing (OLAP) | | :------- | :--------- | :--------- | | Formål | Understøtter daglige transaktioner og operationer | Understøtter beslutningstagning og analyse | | Data Struktur | Normaliseret for at minimere dataduplication | Denormaliseret for at optimere læseoperationer | | Forespørgsler | Korte, simple forespørgsler | Komplekse forespørgsler og analyser | | Opdateringer | Hyppige opdateringer, indsættelser og sletninger | Sjældne opdateringer, primært indlæsning af data | | Datavolumen | Håndterer mindre datamængder | Håndterer store datamængder | | Tidshorisont | Aktuelle data | Historiske data | ---- ### OLTP vs OLAP | Egenskab | **OLTP**<br>Online Transaction Processing | **OLAP**<br>Online Analytical Processing | | :------- | :--------- | :--------- | | Formål | Understøtter daglige operationer | Understøtter beslutningstagning og analyse | | Behandlingstid | Hurtig, realtidsbehandling | Langsom, batchbehandling | | Transaktionstype | Kortvarige, enkle transaktioner | Lange, komplekse forespørgsler | | Data Volumen | Håndterer mange små transaktioner | Håndterer få store forespørgsler | | Brugere | Mange samtidige brugere | Færre brugere, ofte analytikere | | Data Struktur | Normaliseret | Denormaliseret | | Eksempler | Banktransaktioner, ordrebehandling | Salgsanalyse, markedsundersøgelser | ---- ### Fordele ved Data Warehouse - **Forbedret beslutningstagning** - Giver et samlet overblik over virksomhedens data, hvilket muliggør bedre og mere informerede beslutninger <!-- .element class="fragment" --> - **Øget effektivitet** - Centraliserer data fra forskellige kilder, hvilket reducerer tid og indsats brugt på dataindsamling og -forberedelse <!-- .element class="fragment" --> - **Historisk analyse** - Muliggør analyse af historiske data for at identificere trends og mønstre over tid <!-- .element class="fragment" --> - **Forbedret datakvalitet** - Standardiserer og konsoliderer data, hvilket forbedrer datakvaliteten og pålideligheden <!-- .element class="fragment" --> - **Skalerbarhed** - Kan håndtere store mængder data og vokse med virksomhedens behov <!-- .element class="fragment" --> ---- ### Udfordringer ved Data Warehouse - **Omkostninger** - Implementering og vedligeholdelse af et Data Warehouse kan være dyrt, især for små virksomheder <!-- .element class="fragment" --> - **Kompleksitet** - Design og administration af et Data Warehouse kan være komplekst og kræver specialiseret viden <!-- .element class="fragment" --> - **Data integration** - Integrering af data fra forskellige kilder kan være udfordrende, især hvis datakvaliteten varierer <!-- .element class="fragment" --> ---- ### ETL og ELT  ---- ### ETL Proces - **Extract** - Data hentes fra forskellige kilder som databaser, filer eller API'er <!-- .element class="fragment" --> - **Transform** - Data renses, standardiseres og omformes for at sikre konsistens og kvalitet <!-- .element class="fragment" --> - **Load** - De transformerede data indlæses i Data Warehouse for analyse og rapportering <!-- .element class="fragment" --> ---- #### ELT Proces - **Extract** - Data hentes fra forskellige kilder som databaser, filer eller API'er <!-- .element class="fragment" --> - **Load** - Data indlæses direkte i Data Warehouse uden forudgående transformation <!-- .element class="fragment" --> - **Transform** - Data transformeres inden for Data Warehouse ved hjælp af dets beregningskraft og kapaciteter <!-- .element class="fragment" --> ---- #### ETL vs ELT | Egenskab | **ETL**<br>Extract, Transform, Load | **ELT**<br>Extract, Load, Transform | | :------- | :--------- | :--------- | | Formål | Data transformeres før indlæsning i Data Warehouse | Data indlæses først og transformeres derefter i Data Warehouse | | Behandlingstid | Kan være langsommere på grund af transformation før indlæsning | Kan være hurtigere ved at udnytte Data Warehouse's kapaciteter | | Datavolumen | Velegnet til mindre datamængder | Velegnet til store datamængder | | Kompleksitet | Mere kompleks på grund af transformationsprocessen | Mindre kompleks, da transformation sker i Data Warehouse | | Omkostninger | Kan være dyrere på grund af ekstra transformationsværktøjer | Kan være billigere ved at reducere behovet for eksterne værktøjer | | Brugsscenarier | Når datakvalitet og konsistens er kritisk før indlæsning | Når hurtig indlæsning og skalerbarhed er vigtig | ---- ### ETL/ELT kilder - Databaser (SQL, NoSQL) <!-- .element class="fragment" --> - Filer (CSV, JSON, XML) <!-- .element class="fragment" --> - API'er (REST, SOAP) <!-- .element class="fragment" --> - Cloud-tjenester (AWS, Azure, Google Cloud) <!-- .element class="fragment" --> - Event streaming data (Kafka, Kinesis) <!-- .element class="fragment" --> ---- ### Transformation - **Rensning** - Fjernelse af duplikater, håndtering af manglende værdier, korrektion af fejl <!-- .element class="fragment" --> - **Standardisering** - Ensartning af formater, enheder og navngivningskonventioner <!-- .element class="fragment" --> - **Berigelse** - Tilføjelse af yderligere oplysninger fra eksterne kilder <!-- .element class="fragment" --> - **Aggrering** - Sammensætning af data for at skabe summerede eller opsummerede visninger <!-- .element class="fragment" --> - **Filtrering** - Udvælgelse af relevante data baseret på specifikke kriterier <!-- .element class="fragment" --> ---- ### Transformation værktøjer - Regex og scripts (e.g. Python, SQL) <!-- .element class="fragment" --> - **Azure Data Factory** - En cloud-baseret ETL/ELT tjeneste til data integration og transformation <!-- .element class="fragment" --> - **Apache NiFi** - Et open-source værktøj til automatisering af dataflow mellem systemer <!-- .element class="fragment" --> - **Talend** - En open-source data integration platform med ETL/ELT kapaciteter <!-- .element class="fragment" --> ---- ### Data modellering i Data Warehouse - **Star Schema** - En simpel og effektiv datamodel, hvor en central **fact table** er forbundet til flere dimensionstabeller <!-- .element class="fragment" --> - **Snowflake Schema** - En mere kompleks datamodel, hvor dimensionstabeller er normaliserede og kan have flere niveauer af relationer <!-- .element class="fragment" --> ----  ---- ### Star Schema - Central **fact table**, der indeholder måledata og nøgler til dimensionstabeller <!-- .element class="fragment" --> - Flere dimensionstabeller, der indeholder beskrivende attributter relateret til **fact table**len <!-- .element class="fragment" --> - Enkel og hurtig forespørgselsydelse på grund af den denormaliserede struktur <!-- .element class="fragment" --> ----  ---- ### Snowflake Schema - Central **fact table**, der indeholder måledata og nøgler til dimensionstabeller <!-- .element class="fragment" --> - Dimensionstabeller er normaliserede, hvilket reducerer dataduplication og forbedrer dataintegritet <!-- .element class="fragment" --> - Mere kompleks struktur, der kan føre til langsommere forespørgselsydelse <!-- .element class="fragment" --> ---- ### Valg af schema | Egenskab | **Star Schema** | **Snowflake Schema** | | :------- | :--------- | :--------- | | Datakompleksitet | Simpel og let at forstå | Mere kompleks og kræver dybere forståelse | | Forespørgselsydelse | Hurtig på grund af denormaliseret struktur | Kan være langsommere på grund af flere joins | | Dataduplication | Højere på grund af denormalisering | Lavere på grund af normalisering | | Vedligeholdelse | Lettere at vedligeholde og opdatere | Mere kompleks vedligeholdelse | | Brugsscenarier | Velegnet til hurtige forespørgsler og rapportering | Velegnet til komplekse analyser og dataintegritet | | Omkostninger | Kan være dyrere på grund af større datalagring | Kan være billigere ved at reducere datalagring | ---- ### Hvad bruges Data Warehouses til? - Forretningsanalyse og rapportering <!-- .element class="fragment" --> - Data mining og mønstergenkendelse <!-- .element class="fragment" --> - Kundesegmentering og målretning <!-- .element class="fragment" --> - Salgs- og marketinganalyse <!-- .element class="fragment" --> - Typisk ifm. BI (Business Intelligence) løsninger <!-- .element class="fragment" --> ---- ### Populære Data Warehouse løsninger - Dedikerede Data Warehouse platforme: - Amazon Redshift - Google BigQuery - Snowflake - Microsoft Azure Synapse Analytics - Relationelle databaser med Data Warehouse kapaciteter: - Microsoft SQL Server - Oracle Database - IBM Db2 - PostgreSQL --- ## Big Data ---- ### Hvad er Big Data? <div class="grid"> <div> - Big Data refererer til store og komplekse datasæt, der er vanskelige at behandle og analysere ved hjælp af traditionelle databehandlingsmetoder <!-- .element class="fragment" --> - Big Data karakteriseres ofte ved de tre V'er: Volume (mængde), Velocity (hastighed) og Variety (variation) <!-- .element class="fragment" --> - **Volume** - Store mængder data, ofte i petabyte eller exabyte skala <!-- .element class="fragment" --> - **Velocity** - Data genereres og behandles i realtid eller nær-realtidsbehandling <!-- .element class="fragment" --> - **Variety** - Data kommer i forskellige formater, herunder strukturerede, semi-strukturerede og ustrukturerede data <!-- .element class="fragment" --> </div> <div>  </div> </div> ---- ### Typer af data: unstructured <div class="grid"> <div>  - Tekstfiler (e.g. dokumenter, e-mails) - Billeder og videoer - Sociale medier indhold (e.g. tweets, Facebook opslag) </div> <div>  </div> </div> ---- ### Typer af data: semi-structured <div class="grid"> <div>  - JSON og XML filer - Logfiler - Sensor data (e.g. IoT enheder) </div> <div>  </div> </div> ---- ### Typer af data: structured <div class="grid"> <div>  - Relationelle databaser (e.g. SQL databaser) - Regneark (e.g. Excel filer) - Data fra ERP og CRM systemer - Transaktionsdata (e.g. salgsdata) </div> <div>  </div> </div> --- ## SQL & Data Warehousing ---- ### Rollen af SQL i Data Warehousing - SQL er det primære sprog til forespørgsler, analyse og manipulation af data i Data Warehouses <!-- .element class="fragment" --> - Giver en standardiseret måde at hente aggregerede data fra store datasæt <!-- .element class="fragment" --> - Understøttes af stort set alle Data Warehouse- og Big Data-platforme <!-- .element class="fragment" --> ---- ### SQL-funktioner i Data Warehousing - **Aggregation**: `SUM()`, `COUNT()`, `AVG()`, `MIN()`, `MAX()` <!-- .element class="fragment" --> - **Filtering**: `WHERE`, `HAVING` <!-- .element class="fragment" --> - **Joins**: `INNER JOIN`, `LEFT JOIN`, `RIGHT JOIN`, `FULL JOIN` <!-- .element class="fragment" --> - **Grouping**: `GROUP BY`, `CUBE` <!-- .element class="fragment" --> - **Matematiske funktioner**: `ROUND()`, `CEIL()`, `FLOOR()` m.m. <!-- .element class="fragment" --> - **Dato og tidsfunktioner**: `DATEPART()`, `DATEDIFF()`, `GETDATE()` m.m. <!-- .element class="fragment" --> ---- ### SQL-eksempel: Salgsrapport <div class="grid"> <div> - Hent total salg, antal salg og gennemsnitligt salg pr. produkt for året 2023 <!-- .element class="fragment" --> - Filtrer produkter med total salg over 10.000 <!-- .element class="fragment" --> - Sorter resultater efter total salg i faldende rækkefølge <!-- .element class="fragment" --> </div> <div> ```sql [1-5|12-15|16-17] SELECT p.ProductName, SUM(s.SalesAmount) AS TotalSales, COUNT(s.SaleID) AS NumberOfSales, AVG(s.SalesAmount) AS AverageSaleAmount FROM Sales s JOIN Products p ON s.ProductID = p.ProductID WHERE s.SaleDate BETWEEN '2023-01-01' AND '2023-12-31' GROUP BY p.ProductName HAVING SUM(s.SalesAmount) > 10000 ORDER BY TotalSales DESC; ``` </div> </div> ---- ### Aggregate functions | Funktion | Beskrivelse | | :------- | :--------- | | `SUM(column)` | Returnerer summen af værdierne i en kolonne | | `COUNT(column)` | Returnerer antallet af ikke-null værdier i en kolonne | | `AVG(column)` | Returnerer gennemsnittet af værdierne i en kolonne | | `MIN(column)` | Returnerer den mindste værdi i en kolonne | | `MAX(column)` | Returnerer den største værdi i en kolonne | ---- ### Eksempel på aggregate functions ```sql [] SELECT SUM(FilmRunTimeMinutes) AS [TotalRunTimeMinutes] , AVG(FilmRunTimeMinutes) AS [AverageRunTime] , MAX(FilmRunTimeMinutes) AS [HighestRunTime] , MIN(FilmRunTimeMinutes) AS [LowestRunTime] , COUNT(*) AS [FilmAmount] FROM Movies; ``` ---- ### Group By og aggregering - Ofte brugt til at summere og gruppere store datamængder <!-- .element class="fragment" --> ```sql [] SELECT region, product_category, SUM(sales_amount) AS total_sales FROM fact_sales JOIN dim_product ON fact_sales.product_id = dim_product.product_id GROUP BY region, product_category ORDER BY total_sales DESC; ``` <!-- .element class="fragment" --> ---- ### Cube - Udvider funktionaliteten af `GROUP BY` ved at generere flere niveauer af aggregerede data <!-- .element class="fragment" --> - Giver mulighed for at analysere data på forskellige dimensioner og niveauer <!-- .element class="fragment" --> ```sql [] SELECT region, product_category, SUM(sales_amount) AS total_sales FROM fact_sales GROUP BY CUBE(region, product_category); ``` <!-- .element class="fragment" --> <div class="fragment grid"> <div> Data grundlag: | region | product_category | sales_amount | | :----- | :--------------- | :----------- | | East | Electronics | 10000 | | East | Electronics | 20000 | | East | Furniture | 20000 | | West | Electronics | 15000 | | West | Furniture | 25000 | </div> <div> Resultat: | region | product_category | total_sales | | :----- | :--------------- | :---------- | | East | Electronics | 30000 | | East | Furniture | 20000 | | West | Electronics | 15000 | | West | Furniture | 25000 | </div> </div> ---- ### Aggregation bruges ikke kun i Data warehouse - Kan også bruges i almindelige databaser <!-- .element class="fragment" --> - F.eks. for at finde gennemsnitsalderen af brugere i en bruger tabel <!-- .element class="fragment" --> - Eller for at tælle antal ordrer pr. kunde i en ordre tabel <!-- .element class="fragment" --> --- ## Opgaver [https://ucl.kjc.dk/dfu/dfu-05-aggregation.html](/dfu/dfu-05-aggregation.html)
Toggle fullwidth
sql
sql
sql
sql