183 lines
4.4 KiB
Markdown
183 lines
4.4 KiB
Markdown
# LF 8: Daten systemübergreifend bereitstellen
|
|
|
|
> **2. Ausbildungsjahr** | Zeitrichtwert: **80 Stunden**
|
|
|
|
## Kernkompetenz
|
|
|
|
Die Schülerinnen und Schüler besitzen die Kompetenz, Daten aus dezentralen Quellen zusammenzuführen, aufzubereiten und zur weiteren Nutzung zur Verfügung zu stellen.
|
|
|
|
---
|
|
|
|
## Lernziele
|
|
|
|
Nach diesem Lernfeld kannst du:
|
|
- [ ] Datenquellen analysieren und bewerten
|
|
- [ ] Heterogene Datenquellen integrieren
|
|
- [ ] Daten für die Weiterverarbeitung aufbereiten
|
|
- [ ] APIs und Schnittstellen nutzen
|
|
- [ ] Datenbanksysteme anbinden
|
|
- [ ] Dokumentation erstellen
|
|
|
|
---
|
|
|
|
## Datenquellen
|
|
|
|
### Typen
|
|
|
|
```
|
|
DATENQUELLEN
|
|
├── Relationale Datenbanken
|
|
│ ├── MySQL/MariaDB
|
|
│ ├── PostgreSQL
|
|
│ └── MS SQL Server
|
|
├── NoSQL-Datenbanken
|
|
│ ├── MongoDB (Dokument)
|
|
│ ├── Redis (Key-Value)
|
|
│ └── Cassandra (Spaltenorientiert)
|
|
├── Dateien
|
|
│ ├── CSV, JSON, XML
|
|
│ └── Excel, PDF
|
|
├── Web-Services
|
|
│ ├── REST-APIs
|
|
│ └── SOAP
|
|
└── Cloud-Dienste
|
|
└── AWS S3, Azure Blob, etc.
|
|
```
|
|
|
|
---
|
|
|
|
## Datenintegration
|
|
|
|
### ETL-Prozess
|
|
|
|
```
|
|
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
│ Extract │ → │ Transform│ → │ Load │ → │ Target │
|
|
└─────────┘ └─────────┘ └─────────┘ └─────────┘
|
|
│ │
|
|
│ Bereinigung │
|
|
│ Konvertierung │
|
|
│ Aggregation │
|
|
```
|
|
|
|
### Herausforderungen
|
|
|
|
- **Datenqualität**: Vollständigkeit, Konsistenz
|
|
- **Formate**: Unterschiedliche Strukturen
|
|
- **Latenz**: Echtzeit vs. Batch
|
|
- **Security**: Authentifizierung, Autorisierung
|
|
|
|
---
|
|
|
|
## APIs (Application Programming Interface)
|
|
|
|
### REST-Prinzipien
|
|
|
|
```
|
|
REST-Konventionen:
|
|
├── Ressourcenorientiert (Nomen)
|
|
├── HTTP-Methoden nutzen
|
|
│ ├── GET → Lesen
|
|
│ ├── POST → Erstellen
|
|
│ ├── PUT → Ersetzen
|
|
│ ├── PATCH → Teilaktualisierung
|
|
│ └── DELETE → Löschen
|
|
├── Statuscodes
|
|
│ ├── 200 OK
|
|
│ ├── 201 Created
|
|
│ ├── 400 Bad Request
|
|
│ ├── 401 Unauthorized
|
|
│ └── 404 Not Found
|
|
└── Stateless (zustandslos)
|
|
```
|
|
|
|
### API-Beispiel
|
|
|
|
```python
|
|
# Python REST-API mit Flask
|
|
from flask import Flask, jsonify, request
|
|
|
|
app = Flask(__name__)
|
|
|
|
# GET - Daten abrufen
|
|
@app.route('/api/kunden', methods=['GET'])
|
|
def get_kunden():
|
|
return jsonify(kunden_liste)
|
|
|
|
# POST - Daten erstellen
|
|
@app.route('/api/kunden', methods=['POST'])
|
|
def create_kunde():
|
|
daten = request.json
|
|
kunden_liste.append(daten)
|
|
return jsonify(daten), 201
|
|
|
|
# PUT - Daten aktualisieren
|
|
@app.route('/api/kunden/<int:id>', methods=['PUT'])
|
|
def update_kunde(id):
|
|
daten = request.json
|
|
for i, k in enumerate(kunden_liste):
|
|
if k['id'] == id:
|
|
kunden_liste[i] = daten
|
|
return jsonify(daten)
|
|
return jsonify({'error': 'Not found'}), 404
|
|
```
|
|
|
|
---
|
|
|
|
## Datenbank-Anbindung
|
|
|
|
### Python mit SQLAlchemy
|
|
|
|
```python
|
|
from sqlalchemy import create_engine, Column, Integer, String
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
|
|
Base = declarative_base()
|
|
|
|
class Kunde(Base):
|
|
__tablename__ = 'kunden'
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String(100))
|
|
email = Column(String(255))
|
|
|
|
# Verbindung herstellen
|
|
engine = create_engine('sqlite:///kunden.db')
|
|
Base.metadata.create_all(engine)
|
|
Session = sessionmaker(bind=engine)
|
|
session = Session()
|
|
|
|
# Daten abfragen
|
|
for kunde in session.query(Kunde).all():
|
|
print(f"{kunde.id}: {kunde.name}")
|
|
```
|
|
|
|
---
|
|
|
|
## Handlungsphasen
|
|
|
|
1. **Analysieren**: Datenquellen identifizieren, Strukturen verstehen
|
|
2. **Planen**: Integrationskonzept erstellen
|
|
3. **Entwickeln**: Schnittstellen implementieren
|
|
4. **Testen**: Datenfluss prüfen
|
|
5. **Dokumentieren**: Handhabung beschreiben
|
|
|
|
---
|
|
|
|
## Prüfungsrelevanz
|
|
|
|
- Wichtig für LF 12a (Abschlussprojekt)
|
|
- Datenintegration in Projekten
|
|
|
|
---
|
|
|
|
## Querverweise
|
|
|
|
- [[2-Ausbildungsjahr/LF7-Cyber-physische-Systeme|Vorher: LF 7]]
|
|
- [[2-Ausbildungsjahr/LF9-Netzwerke-Dienste|Nachher: LF 9]]
|
|
- [[Programmiersprachen/Python|Python Vertiefung]]
|
|
|
|
---
|
|
|
|
*Stand: 2024 | Quelle: KMK Rahmenlehrplan 13.12.2019*
|