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.
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
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.
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:
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:
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:
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:
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:
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:
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:
# 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
Das SAP Business Application Studio hat sich aus mehreren Gründen als ideale Entwicklungsumgebung erwiesen:
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.
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.