# 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/', 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*