Nahtlose Integration: SAP Datasphere mit Python-Server auf SAP BTP verbinden

Die Kombination von SAP Datasphere mit der Flexibilität und Leistungsfähigkeit von Python eröffnet völlig neue Möglichkeiten für Datenanalysen und -verarbeitung. In diesem Blogpost teilen wir unsere Erfahrungen, wie wir mithilfe der hdbcli-Bibliothek eine robuste Verbindung zwischen SAP Datasphere und einem externen Python-Server auf der SAP Business Technology Platform (BTP) aufgebaut haben. Diese Integration ermöglicht nicht nur den direkten Datenzugriff, sondern auch die nahtlose Nutzung externer APIs zur Erweiterung der Analysis Capabilities. Als Entwicklungsumgebung kam dabei das SAP Business Application Studio zum Einsatz. 

Warum SAP Datasphere mit Python kombinieren?

SAP Datasphere bietet eine leistungsstarke Cloud-Plattform für Datenintegration und -analyse. Man muss auch erwähnen, dass Python in Datasphere bereits integriert wurde, und zwar beim Script Operator, wo ausschließlich 2 Standardbibliotheken verfügbar sind: Pandas & NumPy. Doch manchmal benötigen wir spezialisierte Funktionen, die über die nativen Möglichkeiten hinausgehen: 

  • Zugriff auf externe APIs zur Anreicherung von Geschäftsdaten  

  • Nutzung von Python-Bibliotheken für fortgeschrittene Datenanalysen und Machine Learning 

  • Automatisierung komplexer Datenverarbeitungsprozesse 

  • Flexibilität bei der Implementierung spezifischer Geschäftslogik 

Unser Praxisbeispiel

Teamfact verfügt über eigene E-Fahrzeugflotte und nach jedem Ladevorgang des Autos speichern wir alle Daten ab. Nun sind wir auf die Idee gekommen, diese Daten zu analysieren und dementsprechend auf einem Dashboard in SAP Analytics Cloud zu visualisieren. Für eine aussagekräftige Kartenvisualisierung benötigt man Geokoordinaten (Latitude & Longtitude), um daraus eine Location abzubilden. Diese Koordinaten lassen sich durch HERE API mit vorhandenen Adressendaten erfassen.

Vorbereitungen in SAP Datasphere

Der erste Schritt ist die Modellierung des Datenmodells. Man benötigt eine zusätzliche View ChargeIDAddressExport, um die Adressdaten aus Datasphere zu extrahieren und eine Tabelle ChargeID_Geodata, um die in Python generierten Daten zurück in die Datasphere zu laden. 

Unser Datenmodell sieht wie folgt aus:  

Die technische Umsetzung mit SAP Business Application Studio

1. Einrichtung der Entwicklungsumgebung 

Das SAP Business Application Studio bietet eine ideale Plattform für die Entwicklung unserer Python-Anwendung. So wurde die Umgebung eingerichtet: 

  1. In SAP BTP Cockpit das Business Application Studio geöffnet 
  2. Einen neuen Dev Space mit dem Typ "Full Stack Cloud Application" erstellt 
  3. Python-Module via pip install im Terminal von SAP Business Application Studio installiert 

2. Konfiguration des Python-Projekts 

Im Business Application Studio wurde ein neues Python-Projekt erstellt: 


3. Installation der hdbcli-Bibliothek 

Im integrierten Terminal des Business Application Studio wurde die hdbcli-Bibliothek installiert: 

pip install hdbcli

4. Verbindungsaufbau zu SAP Datasphere 

Der folgende Code zeigt, wie wir die Verbindung zu SAP Datasphere hergestellt haben: 

Python
def datasphereDataConnect(): 
    try: 
        connection = dbapi.connect( 
            address=SAP_HOST, 
            port=SAP_PORT, 
            user=SAP_USER, 
            password=SAP_PASSWORD, 
            encrypt=SAP_ENCRYPT, 
            sslTrustStore=SAP_SSLTRUSTSTORE 
        ) 
        return connection 
    except Exception as e: 
        raise Exception(f"Error connecting to SAP Datasphere: {e}")

Nun lassen sich die Daten aus der View konsumieren:

Python
def fetch_view_data(connection): 
    query = 'SELECT "ID", "Ort", "Anbieter" FROM "TEAMFACT_ELECTRIC"."ChargeIDAddressExport"' 
    try: 
        df = pd.read_sql_query(query, con=connection) 
        return df 
    except Exception as e: 
        raise Exception(f"Error fetching data: {e}")

5. Integration externer APIs 

Einer der Hauptvorteile dieser Architektur ist die Möglichkeit, externe APIs zu nutzen und die Ergebnisse zurück in SAP Datasphere zu speisen:

Python
import requests 


def get_geocode(query): 
    """Fetch geocode data for a given address.""" 
    params = { 
        'q': query, 
        'apiKey': API_KEY, 
        'lang': 'en' 
    } 
    response = requests.get(BASE_URL, params=params) 
    if response.status_code == 200: 
        return response.json() 
    else: 
        raise Exception(f"Error fetching geocode for {query}: {response.status_code}")

Externe Daten werden nach der Transformation in die Zieltabelle geschrieben:

Python
from sqlalchemy import create_engine 


# Create engine for database connection
engine = create_engine( 
    f'hana://{SAP_USER}:{SAP_PASSWORD}@{SAP_HOST}:{SAP_PORT}', 
    connect_args={ 
        'sslTrustStore': SAP_SSLTRUSTSTORE, 
        'encrypt': SAP_ENCRYPT, 
        'sslHostNameInCertificate': "*" 
    }, 
    echo=False 
) 

# Write to database
yield "???? Writing to database..." 
final_df.to_sql( 
    name="ChargeID_Geodata", 
    con=engine, 
    index=False, 
    if_exists="append", 
    schema=TARGET_SCHEMA 
)

6. Deployment der Anwendung auf SAP BTP 

Das Business Application Studio bietet direkte Deployment-Funktionen für SAP BTP. In unserem Use Case nutzten wir Cloud Foundry: 

YAML
# Beispiel manifest.yml für die Python-Anwendung auf SAP BTP
applications: 
- name: python-api-connector 
  memory: 512M 
  buildpack: python_buildpack 
  command: python app.py 
  services: 
    - destination-service

Im Terminal des Business Application Studio müssen folgende Befehle ausgeführt werden:

cf login -a <API-Endpoint> -u <username>
cf push

Vorteile des SAP Business Application Studios für dieses Projekt

Das SAP Business Application Studio hat sich aus mehreren Gründen als ideale Entwicklungsumgebung erwiesen: 

  1. Nahtlose Integration mit SAP BTP: Direkte Verbindungsmöglichkeiten zu anderen SAP-Services 
  2. Integrierte Deployment-Funktionen: Deployment direkt aus der IDE heraus 
  3. Browserbasierte Entwicklung: Kein lokales Setup erforderlich 
  4. Git-Integration: Einfache Versionsverwaltung der Entwicklung 
  5. Extensions: Anpassbare Entwicklungsumgebung durch Extensions für Python 

Anwendungsfälle aus der Praxis

Echtzeit-Datenintegration 

Unser primäres Ziel war es, Daten aus externen Quellen in Echtzeit zu integrieren. Der Python-Server fungiert als Middleware, je nach Einstellungen mit unterschiedlicher Häufigkeit oder mit einem Button-Click Daten abruft, verarbeitet und in SAP Datasphere speichert. Diese können dann für Business-Intelligence-Berichte und Dashboards verwendet werden. 

Erweiterung der Analysekapazitäten 

Durch die Nutzung von Python-Bibliotheken konnten wir fortgeschrittene Analysen und daraus folgende Visualisierungen implementieren, die direkt mit den Unternehmensdaten in SAP Datasphere arbeiten. 

API-Gateway-Funktionalität 

Die Integration dient auch als sicheres API-Gateway, das die Authentifizierung und Autorisierung für externe Services verwaltet und gleichzeitig die Einhaltung der Unternehmensrichtlinien sicherstellt. 

Fazit und Ausblick

Die Integration von SAP Datasphere mit einem externen Python-Server auf SAP BTP, entwickelt im SAP Business Application Studio, hat sich als äußerst wertvoll erwiesen. Sie erweitert die nativen Fähigkeiten von SAP Datasphere und ermöglicht gleichzeitig die Nutzung des umfangreichen Python-Ökosystems für Datenbeschaffung und -verarbeitung. 

Die Entwicklung im Business Application Studio hat den gesamten Prozess optimiert – von der ersten Implementierung bis zum Deployment und der Wartung der Lösung. 

Für die Zukunft besteht die Option, diese Integration weiter zu optimieren und um folgende Funktionen zu erweitern: 

  • Implementierung von Machine-Learning-Modellen für prädiktive Analysen 

  • Integration weiterer Datenquellen über spezialisierte APIs 

  • Entwicklung einer benutzerfreundlichen Weboberfläche zur Steuerung des Python-Servers 

  • Nutzung weiterer Features des Business Application Studios für CI/CD-Prozesse 

Die Kombination der cloudbasierten Datamanagement-Lösung SAP Datasphere, der Flexibilität von Python, der Entwicklungsumgebung SAP Business Application Studios und der BTP als Platform-as-a-Service, bietet eine leistungsstarke Grundlage für moderne Datenanalyse-Lösungen in Unternehmen jeder Größe.