CubeServ Blog
Bleiben Sie auf dem neuesten Stand, rund um das Data Driven Business mit Tools für Analytics von SAP & Co. und verpassen Sie keine Neuigkeiten, Downloads & Veranstaltungen.

Das Internet der Dinge, Big Data und eine Fischertechnik-Fabrik – Teil 5: Visualisierung mittels CalculationView und SAP Cloud for Analytics

In den vorherigen Teilen dieses Blogs wurde gezeigt, wie die Sensordaten der Fabriksimulation schliesslich als Tabelle (genauer: als Tabellenlink) in der SAP HANA verfügbar gemacht wurde.

Der nächste Schritt wäre nun beispielsweise in der HANA einen gescripteten (oder alternativ auch graphischen) CalculationView anzulegen, der die Meldungen der Motoren Q2, Q3 und Q4 in etwa wie folgt liest (am Beispiel Q2):

SELECT count(*) FROM "DATA_EXTERN"."IMPALA_ZCSSENSORQ" where "sensor" = 'Q2' and "value" = '1';

Leider sind wir dabei aber gegen einen Bug im SAP-Adapter gelaufen, der Adapter produziert eine fehlerhafte Abfrage mit unsinnigen „N“-Literalen in der Query:

Could not execute 'SELECT count(*) FROM "DATA_EXTERN"."IMPALA_ZCSSENSORQ" where "sensor" = 'Q2' and "value" = '1'' in 89 ms 673 µs . SAP DBTech JDBC: [403]: internal error: Error opening the cursor for the remote database Failed to execute query [SELECT COUNT(*) FROM `sapt90`.`zcssensorq` `IMPALA_ZCSSENSORQ` WHERE (`IMPALA_ZCSSENSORQ`.`sensor` = N'Q2') AND (`IMPALA_ZCSSENSORQ`.`value` = N'1')]. for query "SELECT COUNT(*) FROM """sapt90"".""zcssensorq""" "IMPALA_ZCSSENSORQ" WHERE "IMPALA_ZCSSENSORQ"."sensor" = 'Q2' AND "IMPALA_ZCSSENSORQ"."value" = '1' "

Dieser Fehler im Impala-Adapter wird bereits im SAP-Hinweis „2562391 – Keine SQL-Abfrage gegen eine virtuelle Impala-Tabelle mit Literalzeichenfolge in der WHERE-Bedingung“ beschrieben. Die Lösung besteht leider in keinem einfachen Patch, sondern der benutze SDI-Agent vom Release 1.0 muss durch eine 2.0-Installation ersetzt werden. Da vorhandene Verbindungen, die diesen Agenten benutzen, dabei verloren gehen und neu angelegt werden müssen, wurde die Installation eines neuen 2.0-Agenten separat vorangetrieben, die Modellierung aber mit dem fehlerhaften 1.0-Agenten fortgesetzt, um doch möglichst schnell einen funktionierenden Prototypen zu erhalten. Da nun gegen die Impala-Adapter keine WHERE-Bedingungen gefeuert werden dürfen und doch Impala wegen der besseren Geschwindigkeit im Vergleich zu Hive verwendet werden sollte, wurde folgendes gemacht:

  1. Bereits auf der Hadoop-Seite wurde neben der Tabelle zcssensorq auch die Tabellen zcssensorq2, zcssensorq3 und zcssensorq4 gefüllt, und zwar nur für die Tabellenzeilen, bei denen der Sensorwert = 1 war. Die Tabellen enthalten also nur die Aktiv-Meldungen des entsprechenden Q-Sensors und sonst nichts. Damit müssen nur die Zeilen der Tabelle gezählt werden ohne jede WHERE-Bedingung.
  2. Es wurde in der HANA ein CalculationView angelegt, der folgendes Zählen durchführt:

tmp1 = select count( * ) as "COUNT_Q2" from "DATA_EXTERN"."IMPALA_ZCSSENSORQ2";

tmp2 = select count( * ) as "COUNT_Q3" from "DATA_EXTERN"."IMPALA_ZCSSENSORQ3";

tmp3 = select count( * ) as "COUNT_Q4" from "DATA_EXTERN"."IMPALA_ZCSSENSORQ4";

var_out = select "COUNT_Q2", "COUNT_Q3", "COUNT_Q4" from :tmp1, :tmp2, :tmp3;

Leider führt aber selbst dieses WHERE-freie Coding zu einem Abfragefehler aufgrund des Bugs im Impalaadapter. Grund ist, dass die HANA diese Abfrage optimiert und dabei dich wieder WHERE-Bedingungen entstehen. Als Workaround wurde das System gezwungen, diese Optimierung sein zu lassen und die Abarbeitung wirklich sequentiell vorzunehmen. Dies gelang durch die folgenden Befehle, die die entscheidenden Worte „SEQUENTIAL EXECUTION“ enthalten:

drop procedure "_SYS_BIC"."pg.ccedw.sfb18/ZTS1_CV_SFB_COUNTER_Q24/proc";

create procedure "_SYS_BIC"."pg.ccedw.sfb18/ZTS1_CV_SFB_COUNTER_Q24/proc" ( OUT var_out "_SYS_BIC"."pg.ccedw.sfb18/ZTS1_CV_SFB_COUNTER_Q24/proc/tabletype/VAR_OUT" ) language sqlscript sql security definer reads sql data

as

/********* Begin Procedure Script ************/

BEGIN SEQUENTIAL EXECUTION

tmp1 = select count( * ) as "COUNT_Q2" from "DATA_EXTERN"."IMPALA_ZCSSENSORQ2";

tmp2 = select count( * ) as "COUNT_Q3" from "DATA_EXTERN"."IMPALA_ZCSSENSORQ3";

tmp3 = select count( * ) as "COUNT_Q4" from "DATA_EXTERN"."IMPALA_ZCSSENSORQ4";

var_out = select "COUNT_Q2", "COUNT_Q3", "COUNT_Q4" from :tmp1, :tmp2, :tmp3;

END /********* End Procedure Script ************/

Dieser Trick ist natürlich nur ein temporärer Workaround und z.B. nicht stabil gegen die erneute Aktivierung des CalculationViews. Als Notlösung zählt aber nun dieser gescriptete CalculationView wie gewünscht die Tabelleneinträge:

blank

Die Dauer zwischen Auslösen des entsprechenden Motors und dem Hochzählen des Zählers beträgt dabei ca. 4 Sekunden. Dieser View wurde nun in SAP Analytics for Cloud eingebunden. Leider gibt es dort keine Darstellung, die sich selbständig periodisch aktualisiert, daher muss man leider aktuell immer wieder die Darstellung auffrischen, um die Veränderung der Zähler zu sehen.

Insgesamt sieht die Architektur also folgendermassen aus: Sensordaten werden von den Steuergeraten in ein CSV-File geschrieben, dieses wird via Kafka in Cloudera importiert, über Adapter der HANA-Datenbank sind diese in einer HANA verfügbar und SAP Analytics for Cloud bringt diese Daten zur Anzeige. In dieser Architektur ist kein SAP BW beteiligt. Im nächsten Teil dieses Blogs werde ich noch darauf eingehen, wie es möglich ist, solche Daten zwischen Hadoop und SAP BW einfach hin- und herzuschieben.

Newsletter abonnieren

Bleiben Sie auf dem neuesten Stand, rund um das Data Driven Business mit Tools für Analytics von SAP & Co. und verpassen Sie keine Neuigkeiten, Downloads & Veranstaltungen. 

Autor
Expert Team

Blog Artikel unserer Experten

graph

Advanced Analytics mit R: Eine Übersicht

In diesem Blog zeigen wir, wie einfach es ist, Advanced Analytics-Funktionen in R zu nutzen. Wir konzentrieren uns auf verschiedene Diagrammtypen, Regressionsanalysen mit R und Time Series Forcecasts mit R.

Die Zeitdimension in der SAP Data Warehouse Cloud

Mit der Data Warehouse Cloud Version 2020.14 hat SAP die Einbindung von Zeitdimensionen ermöglicht. Warum ist die Zeitdimension so wichtig? Zuvor waren in den zu ladenden Daten für die SAP Data Warehouse Cloud viele Aggregationsebenen einer Datumsspalte erforderlich, z.B. für eine separate Spalte «Quartal» oder

SAP Data Warehouse Cloud – Erfahrungen beim Aufbau eines Datenmodells

Sie verwenden Einkaufsdaten in Ihrem Reporting?  Profitieren Sie von unserem kostenlosen Template!Sie benötigen weitere Daten?  Profitieren Sie von unserer Erfahrung!SAP Data Warehouse Cloud ermöglicht zentrale Datenbestände leicht und intuitiv zu erweitern. Einführung in die SAP Data Warehouse Cloud (DWC) Die SAP Datawarehouse Cloud Lösung ist

Advanced Analytics

Wie Business Analytics erfolgreich gestalten?

Business Analytics einfacher ✅ und effektiver ✅ zu gestalten, ist herausfordernd. Ich stelle mit dieser Blog(serie) meine Lösungsansätze zur Diskussion. ✌

SQLscript Lösungsmuster

Lange danach gesucht? Jetzt gefunden! Unsere Übersicht von typischen Problemen und Lösungen im Bereich von HANA SQLscript.  Die Lösungsmuster reichen dabei von rein sprachlichen Problemen (z.B. „mit welchem Sprachelement ermittle ich den ersten Eintrag“) über formale Probleme (z.B. „wie wandle ich in SQLscript Zeitmerkmale um“)

Die SAP Data Warehouse Cloud – ein neuer grosser (?) Wurf (Teil 2)

Administration als aller Analysis Anfang In einem neuen leeren System sind zunächst immer einige administrative Schritte notwendig, zum Glück sind es in der SAP Data Warehouse Cloud nur einige wenige, die man unbedingt erledigen muss. Natürlicherweise beginnt es mit der Userverwaltung. Das Anlegen neuer User

Die SAP Data Warehouse Cloud – ein neuer grosser (?) Wurf (Teil 1)

Was ist die SAP Data Warehouse Cloud? Wer einen Blick auf die Zukunft von SAP Produkten werfen möchte, der besitzt mit der Agenda der SAP Teched (https://events.sap.com/teched/en/home) eine ganz brauchbare Glaskugel, zumindest für die nähere Zukunft. Auf dieser Agenda zeigt sich, dass SAP mit Nachdruck

Das Internet der Dinge, Big Data und eine Fischertechnik-Fabrik – Teil 6: Hadoop vom ABAP aus ansprechen: die GLUE-Middleware von Datavard

Im vorherigen Teil wurden Daten von Steuergeräten in ein CSV-File geschrieben, dies wurde per Kafka in Hadoop importiert und via Hive-Adapter bzw. Impala-Adpater in einer HANA-Datenbank gelesen. Diese Adapter stellen eine komfortable Möglichkeit dar, um auf die Hadoop-Daten lesend zuzugreifen. Diese Adapter ermöglichen allerdings nicht