# DFU 05 ## Data Warehouse --- ### Hvad er Data Warehouse? ----
- Et Data Warehouse (DW) er en centraliseret database, der bruges til at samle, lagre og analysere store mængder data fra forskellige kilder. - Det er designet til at understøtte beslutningstagning og forretningsanalyse ved at give et samlet overblik over virksomhedens data. - Data Warehouse adskiller sig fra traditionelle databaser ved at være optimeret til læseoperationer og komplekse forespørgsler snarere end transaktionelle operationer.

---- ### 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 - **Integrated** - Data fra forskellige kilder er konsolideret og standardiseret for at sikre konsistens og pålidelighed - **Time-variant** - Data lagres over tid, hvilket muliggør historisk analyse og trendidentifikation - **Non-volatile** - Data i et Data Warehouse ændres ikke efter indlæsning, hvilket sikrer dataintegritet og stabilitet ---- ### Database vs. Data Warehouse | Egenskab | **Operationel database**
Online Transaction Processing (OLTP) | **Data Warehouse**
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**
Online Transaction Processing | **OLAP**
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 - **Øget effektivitet** - Centraliserer data fra forskellige kilder, hvilket reducerer tid og indsats brugt på dataindsamling og -forberedelse - **Historisk analyse** - Muliggør analyse af historiske data for at identificere trends og mønstre over tid - **Forbedret datakvalitet** - Standardiserer og konsoliderer data, hvilket forbedrer datakvaliteten og pålideligheden - **Skalerbarhed** - Kan håndtere store mængder data og vokse med virksomhedens behov ---- ### Udfordringer ved Data Warehouse - **Omkostninger** - Implementering og vedligeholdelse af et Data Warehouse kan være dyrt, især for små virksomheder - **Kompleksitet** - Design og administration af et Data Warehouse kan være komplekst og kræver specialiseret viden - **Data integration** - Integrering af data fra forskellige kilder kan være udfordrende, især hvis datakvaliteten varierer ---- ### ETL og ELT  ---- ### ETL Proces - **Extract** - Data hentes fra forskellige kilder som databaser, filer eller API'er - **Transform** - Data renses, standardiseres og omformes for at sikre konsistens og kvalitet - **Load** - De transformerede data indlæses i Data Warehouse for analyse og rapportering ---- #### ELT Proces - **Extract** - Data hentes fra forskellige kilder som databaser, filer eller API'er - **Load** - Data indlæses direkte i Data Warehouse uden forudgående transformation - **Transform** - Data transformeres inden for Data Warehouse ved hjælp af dets beregningskraft og kapaciteter ---- #### ETL vs ELT | Egenskab | **ETL**
Extract, Transform, Load | **ELT**
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) - Filer (CSV, JSON, XML) - API'er (REST, SOAP) - Cloud-tjenester (AWS, Azure, Google Cloud) - Event streaming data (Kafka, Kinesis) ---- ### Transformation - **Rensning** - Fjernelse af duplikater, håndtering af manglende værdier, korrektion af fejl - **Standardisering** - Ensartning af formater, enheder og navngivningskonventioner - **Berigelse** - Tilføjelse af yderligere oplysninger fra eksterne kilder - **Aggrering** - Sammensætning af data for at skabe summerede eller opsummerede visninger - **Filtrering** - Udvælgelse af relevante data baseret på specifikke kriterier ---- ### Transformation værktøjer - Regex og scripts (e.g. Python, SQL) - **Azure Data Factory** - En cloud-baseret ETL/ELT tjeneste til data integration og transformation - **Apache NiFi** - Et open-source værktøj til automatisering af dataflow mellem systemer - **Talend** - En open-source data integration platform med ETL/ELT kapaciteter ---- ### Data modellering i Data Warehouse - **Star Schema** - En simpel og effektiv datamodel, hvor en central **fact table** er forbundet til flere dimensionstabeller - **Snowflake Schema** - En mere kompleks datamodel, hvor dimensionstabeller er normaliserede og kan have flere niveauer af relationer ----  ---- ### Star Schema - Central **fact table**, der indeholder måledata og nøgler til dimensionstabeller - Flere dimensionstabeller, der indeholder beskrivende attributter relateret til **fact table**len - Enkel og hurtig forespørgselsydelse på grund af den denormaliserede struktur ----  ---- ### Snowflake Schema - Central **fact table**, der indeholder måledata og nøgler til dimensionstabeller - Dimensionstabeller er normaliserede, hvilket reducerer dataduplication og forbedrer dataintegritet - Mere kompleks struktur, der kan føre til langsommere forespørgselsydelse ---- ### 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 - Data mining og mønstergenkendelse - Kundesegmentering og målretning - Salgs- og marketinganalyse - Typisk ifm. BI (Business Intelligence) løsninger ---- ### 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?
- Big Data refererer til store og komplekse datasæt, der er vanskelige at behandle og analysere ved hjælp af traditionelle databehandlingsmetoder - Big Data karakteriseres ofte ved de tre V'er: Volume (mængde), Velocity (hastighed) og Variety (variation) - **Volume** - Store mængder data, ofte i petabyte eller exabyte skala - **Velocity** - Data genereres og behandles i realtid eller nær-realtidsbehandling - **Variety** - Data kommer i forskellige formater, herunder strukturerede, semi-strukturerede og ustrukturerede data

---- ### Typer af data: unstructured
 - Tekstfiler (e.g. dokumenter, e-mails) - Billeder og videoer - Sociale medier indhold (e.g. tweets, Facebook opslag)

---- ### Typer af data: semi-structured
 - JSON og XML filer - Logfiler - Sensor data (e.g. IoT enheder)

---- ### Typer af data: structured
 - Relationelle databaser (e.g. SQL databaser) - Regneark (e.g. Excel filer) - Data fra ERP og CRM systemer - Transaktionsdata (e.g. salgsdata)

--- ## 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 - Giver en standardiseret måde at hente aggregerede data fra store datasæt - Understøttes af stort set alle Data Warehouse- og Big Data-platforme ---- ### SQL-funktioner i Data Warehousing - **Aggregation**: `SUM()`, `COUNT()`, `AVG()`, `MIN()`, `MAX()` - **Filtering**: `WHERE`, `HAVING` - **Joins**: `INNER JOIN`, `LEFT JOIN`, `RIGHT JOIN`, `FULL JOIN` - **Grouping**: `GROUP BY`, `CUBE` - **Matematiske funktioner**: `ROUND()`, `CEIL()`, `FLOOR()` m.m. - **Dato og tidsfunktioner**: `DATEPART()`, `DATEDIFF()`, `GETDATE()` m.m. ---- ### SQL-eksempel: Salgsrapport
- Hent total salg, antal salg og gennemsnitligt salg pr. produkt for året 2023 - Filtrer produkter med total salg over 10.000 - Sorter resultater efter total salg i faldende rækkefølge
```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; ```
---- ### 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 ```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; ``` ---- ### Cube - Udvider funktionaliteten af `GROUP BY` ved at generere flere niveauer af aggregerede data - Giver mulighed for at analysere data på forskellige dimensioner og niveauer ```sql [] SELECT region, product_category, SUM(sales_amount) AS total_sales FROM fact_sales GROUP BY CUBE(region, product_category); ```
Data grundlag: | region | product_category | sales_amount | | :----- | :--------------- | :----------- | | East | Electronics | 10000 | | East | Electronics | 20000 | | East | Furniture | 20000 | | West | Electronics | 15000 | | West | Furniture | 25000 |
Resultat: | region | product_category | total_sales | | :----- | :--------------- | :---------- | | East | Electronics | 30000 | | East | Furniture | 20000 | | West | Electronics | 15000 | | West | Furniture | 25000 |
---- ### Aggregation bruges ikke kun i Data warehouse - Kan også bruges i almindelige databaser - F.eks. for at finde gennemsnitsalderen af brugere i en bruger tabel - Eller for at tælle antal ordrer pr. kunde i en ordre tabel --- ## Opgaver [https://ucl.kjc.dk/dfu/dfu-05-aggregation.html](/dfu/dfu-05-aggregation.html)