{"id":842,"date":"2019-09-17T13:47:44","date_gmt":"2019-09-17T11:47:44","guid":{"rendered":"http:\/\/wordpress.p527199.webspaceconfig.de\/?p=842"},"modified":"2019-09-25T16:17:18","modified_gmt":"2019-09-25T14:17:18","slug":"das-internet-der-dinge-big-data-und-eine-fischertechnik-fabrik-teil-5-visualisierung-mittels-calculationview-und-sap-cloud-for-analytics","status":"publish","type":"post","link":"https:\/\/www.cubeserv.com\/de\/das-internet-der-dinge-big-data-und-eine-fischertechnik-fabrik-teil-5-visualisierung-mittels-calculationview-und-sap-cloud-for-analytics\/","title":{"rendered":"Das Internet der Dinge, Big Data und eine Fischertechnik-Fabrik – Teil 5: Visualisierung mittels CalculationView und SAP Cloud for Analytics"},"content":{"rendered":"\t\t
In den vorherigen Teilen dieses Blogs wurde gezeigt, wie die Sensordaten der Fabriksimulation schliesslich als Tabelle (genauer: als Tabellenlink) in der SAP HANA verf\u00fcgbar gemacht wurde.<\/p>
Der n\u00e4chste Schritt w\u00e4re 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):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t
\n\t\t\t\n\t\t\t\tSELECT count(*) FROM \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ\" where \"sensor\" = 'Q2' and \"value\" = '1';\t\t\t<\/p>\n\t\t\t\t\t<\/blockquote>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tLeider sind wir dabei aber gegen einen Bug im SAP-Adapter gelaufen, der Adapter produziert eine fehlerhafte Abfrage mit unsinnigen \u201eN\u201c-Literalen in der Query:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\tCould not execute 'SELECT count(*) FROM \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ\" where \"sensor\" = 'Q2' and \"value\" = '1'' in 89 ms 673 \u00b5s . 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' \"\t\t\t<\/p>\n\t\t\t\t\t<\/blockquote>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tDieser Fehler im Impala-Adapter wird bereits im SAP-Hinweis \u201e2562391 – Keine SQL-Abfrage gegen eine virtuelle Impala-Tabelle mit Literalzeichenfolge in der WHERE-Bedingung\u201c beschrieben. Die L\u00f6sung 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\u00fcssen, wurde die Installation eines neuen 2.0-Agenten separat vorangetrieben, die Modellierung aber mit dem fehlerhaften 1.0-Agenten fortgesetzt, um doch m\u00f6glichst schnell einen funktionierenden Prototypen zu erhalten. Da nun gegen die Impala-Adapter keine WHERE-Bedingungen gefeuert werden d\u00fcrfen und doch Impala wegen der besseren Geschwindigkeit im Vergleich zu Hive verwendet werden sollte, wurde folgendes gemacht:<\/p>
- Bereits auf der Hadoop-Seite wurde neben der Tabelle zcssensorq auch die Tabellen zcssensorq2, zcssensorq3 und zcssensorq4 gef\u00fcllt, und zwar nur f\u00fcr 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\u00fcssen nur die Zeilen der Tabelle gez\u00e4hlt werden ohne jede WHERE-Bedingung.<\/li>
- Es wurde in der HANA ein CalculationView angelegt, der folgendes Z\u00e4hlen durchf\u00fchrt:<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\ttmp1 = select count( * ) as \"COUNT_Q2\" from \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ2\";
\n
\ntmp2 = select count( * ) as \"COUNT_Q3\" from \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ3\";
\n
\ntmp3 = select count( * ) as \"COUNT_Q4\" from \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ4\";
\n
\nvar_out = select \"COUNT_Q2\", \"COUNT_Q3\", \"COUNT_Q4\" from :tmp1, :tmp2, :tmp3;\t\t\t<\/p>\n\t\t\t\t\t<\/blockquote>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tLeider f\u00fchrt 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 \u201eSEQUENTIAL EXECUTION\u201c enthalten:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\tdrop procedure \"_SYS_BIC\".\"pg.ccedw.sfb18\/ZTS1_CV_SFB_COUNTER_Q24\/proc\";
\n
\ncreate 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
\n
\nas
\n
\n \/********* Begin Procedure Script ************\/
\n
\n BEGIN SEQUENTIAL EXECUTION
\n
\n tmp1 = select count( * ) as \"COUNT_Q2\" from \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ2\";
\n
\n tmp2 = select count( * ) as \"COUNT_Q3\" from \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ3\";\n
\n tmp3 = select count( * ) as \"COUNT_Q4\" from \"DATA_EXTERN\".\"IMPALA_ZCSSENSORQ4\"; \n
\n var_out = select \"COUNT_Q2\", \"COUNT_Q3\", \"COUNT_Q4\" from :tmp1, :tmp2, :tmp3;\n
\nEND \/********* End Procedure Script ************\/\t\t\t<\/p>\n\t\t\t\t\t<\/blockquote>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tDieser Trick ist nat\u00fcrlich nur ein tempor\u00e4rer Workaround und z.B. nicht stabil gegen die erneute Aktivierung des CalculationViews. Als Notl\u00f6sung z\u00e4hlt aber nun dieser gescriptete CalculationView wie gew\u00fcnscht die Tabelleneintr\u00e4ge:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t
\n\t\t\t\t\t\t \n\t\t\t\t\t\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t
\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tDie Dauer zwischen Ausl\u00f6sen des entsprechenden Motors und dem Hochz\u00e4hlen des Z\u00e4hlers betr\u00e4gt dabei ca. 4 Sekunden. Dieser View wurde nun in SAP Analytics for Cloud eingebunden. Leider gibt es dort keine Darstellung, die sich selbst\u00e4ndig periodisch aktualisiert, daher muss man leider aktuell immer wieder die Darstellung auffrischen, um die Ver\u00e4nderung der Z\u00e4hler zu sehen.<\/p>
Insgesamt sieht die Architektur also folgendermassen aus: Sensordaten werden von den Steuergeraten in ein CSV-File geschrieben, dieses wird via Kafka in Cloudera importiert, \u00fcber Adapter der HANA-Datenbank sind diese in einer HANA verf\u00fcgbar und SAP Analytics for Cloud bringt diese Daten zur Anzeige. In dieser Architektur ist kein SAP BW beteiligt. Im n\u00e4chsten Teil dieses Blogs werde ich noch darauf eingehen, wie es m\u00f6glich ist, solche Daten zwischen Hadoop und SAP BW einfach hin- und herzuschieben.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"
In den vorherigen Teilen dieses Blogs wurde gezeigt, wie die Sensordaten der Fabriksimulation schliesslich als Tabelle (genauer: als Tabellenlink) in der SAP HANA verf\u00fcgbar gemacht wurde. Der n\u00e4chste Schritt w\u00e4re 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 … Weiterlesen …<\/a><\/p>\n","protected":false},"author":16,"featured_media":848,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[41],"tags":[45,44,43],"class_list":["post-842","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-iot","tag-business-analytics-platform","tag-hadoop","tag-hana"],"acf":[],"yoast_head":"\n
Das Internet der Dinge, Big Data und eine Fischertechnik-Fabrik - Teil 5: Visualisierung mittels CalculationView und SAP Cloud for Analytics - CubeServ<\/title>\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\t\n\t\n\n\n\n\n\n\t\n\t\n\t\n