SAP HANA: ¿El rey de las Implementaciones de Ciencia de Datos?

Algunas herramientas pueden ser más productivas que otras. A través de nuestra experiencia implementando un óptimo flujo de trabajo de aprendizaje automático en producción, hemos aprendido a apreciar la fuerza cruda de la combinación de SAP HANA con los Servicios de Datos SAP. La cantidad de tiempo que puede salvarse al reformular el enfoque y optimizarlo para usar esta combinación es significativo, comparado con el enfoque vainilla que involucra el uso de Phyton para la disputa, limpieza, descubrimiento y normalización de datos, los cuales son aspectos significativos del desarrollo de un flujo de trabajo de aprendizaje automático.

Consecutivamente, aprendimos a dividir las tareas entre las herramientas dependiendo de los requerimientos, para así utilizar cada una a su máximo potencial y minimizar el tiempo requerido para ejecutar el flujo de trabajo. Una de las fortalezas de los Servicios de datos SAP es su habilidad para ejecutar el script de Python, los cuales son extremadamente poderosos, ya que nos permiten integrar nuestro flujo de trabajo entero con modificaciones ejecutadas en SAP HANA con Python. En la siguiente parte, demostraremos el tiempo requerido para realizar la misma tarea en SAP HANA y Python. Esto es para una sola fase; esta tarea presenta los siguientes parámetros:

parameters.PNG

El script debería de mostrar los siguientes parámetros en la tabla y generar una agregación mensual del comportamiento de cada usuario, convirtiéndolos en una tabla como la mostrada a continuación:

Monthly_Transactional_Checking.PNG

Con este método, podemos chequear el fin de cada mes para discernir si el usuario está endeudado. Como poseemos datos para aproximadamente 180,000 cuentas, estos comandos tomarían tiempo ya que cada usuario haría numerosas transacciones a lo largo de un máximo de nueve años.

La siguiente tabla provee una comparación entre el tiempo requerido para ejecutar esta tarea en Python frente a SAP HANA. Por favor nota que Python ofrece múltiples enfoques para completar esta tarea. El primer método involucra la adición a la tabla de SAP HANA directamente usando la biblioteca de HDBCLI. Sin embargo, dada la cantidad de datos siendo procesados, este enfoque consumiría mucho tiempo.

Consecuentemente, usaremos el segundo método de adición a un archivo de Valores Separados por Comas (CVS) usando la función PANDAS.tocsv(). Este método es más rápido, aunque debería mencionarse que no estamos incluyendo el tiempo necesitado para cargar desde los CSV a la tabla. Solo estamos contabilizando el tiempo requerido para que el script dé los resultados.

Execution_Duration_Analysis.PNG

Como se ha señalado, observamos que Python requiere 5000 segundos para este solo proceso, ¡mientras que a SAP HANA le tomó unos meros 480 segundos! Entendemos que esto es inaceptable debido a varias cuestiones que emergen cuando se lidia con grandes volúmenes de datos en Python. Algunos de ellos son los siguientes:

  1. El volumen de datos extraídos es muy grande para ser almacenado mediante la memoria, por ello debe ser almacenado en lotes. Sin embargo, cuando esto se hace, incurrimos en sobrecargas de tiempo a nuestra ejecución debido a los comandos de SELECCIONAR hechos usando la conexión. Por consiguiente, esta es una espada de doble filo.

  2. Si un enfoque de multiprocesamiento es empleado, encontramos el problema de iniciar múltiples comandos de SELECCIONAR desde SAP HANA, lo cual requiere de más tiempo para ejecutar. El multiprocesamiento también elimina la habilidad de cargar datos directamente a SAP HANA usando los comandos de INSERTAR con HDBCLI. Por lo tanto, necesitaríamos sacar los datos en archivos separados antes de fusionarlos, ya que no podemos tener dos procesos redactándose en la misma fila simultáneamente. Lo que es más, encontramos el mismo cuello de botella de memoria. Estos múltiples procesos requieren programación para mantener la memoria en consideración, así previniendo que el script colapse. Sin embargo esto añade otra capa de complejidad.

  3. Aunque aplicamos la Optimización de Clases de Datos en Pandas para reducir la cantidad de tiempo requerido para ejecutar, todavía hay lentitud debido a la fusión entre los datos transaccionales y los datos dimensionales/de característica.

  4. Más importantes son los problemas relacionados con la administración y el mantenimiento que surgen de las situaciones que involucran grandes scripts en Python, como los anteriores, que involucran numerosas manipulaciones de datos. Un problema importante que puede surgir involucra un error que ocurre en la iteración en la fila 3,000,000, por ejemplo. Es muy difícil mantener errores como estos y lidiar con ellos.

Estos eventos requieren de una solución óptima que sea superior al enfoque vainilla de Python. Necesitamos cambiar nuestra metodología de implementación para utilizar más SAP HANA y Servicios de Datos SAP. Nos sorprendimos por lo fácil que esto fue y por lo fuertes que estas herramientas eran combinadas, al punto de que nuestro flujo de trabajo está ahora casi completamente implementado en estas herramientas. El flujo de trabajo está ahora completo en un 90%; utilizó tres plataformas juntas en una forma eficiente y nos ahorró una cantidad de tiempo significativa que hubiese sido desperdiciada en administrar scripts.

Aún más, el flujo de trabajo se mantuvo con un enfoque que involucraba etapas claras, así que si nos encontrábamos con un error o problema en una etapa, podíamos inmediatamente ubicarlo y atender el problema sin que afecte a otros.

Con esto dicho, debería de recordarse que Python todavía es muy poderoso en casos específicos, siendo algunos de ellos:

  1. Rendimiento de modificaciones de lógica difícil o personalizada a partes pequeñas de los datos. Tal como la técnica de redistribución que introducimos en el artículo anterior.

  2. La instalación y administración del modelo de aprendizaje automatizado.

  3. Reunir datos/ recolectar datos de la web, un asunto que discutiremos a profundidad en otro artículo.

El siguiente diagrama muestra la implementación del flujo de trabajo (“En Progreso”) en Servicios de Datos SAP:

SAP_Data_Services.png

Puedes notar inmediatamente que esto se ve significativamente mejor que el método de administración de script. Podemos ver cada paso único, y qué es lo que hace. También puedes examinar a fondo para ver las entradas y salidas fijas de cada etapa. De tal manera, si una etapa requiere de alguna modificación, estas pueden hacerse independientemente en esta sola etapa. Mientras que el resultado no sea afectado, la siguiente etapa no requerirá de modificaciones por lo normal. En términos de administración, este es uno de los métodos más efectivo para implementar la manipulación de datos para propósitos de aprendizaje automático.

En resumen, el cambio en nuestro enfoque nos trajo numerosos beneficios, los cuales incluyeron:

  1. Ahorrar mucho tiempo en desarrollo y mantenimiento al reducir grandemente el tiempo de ejecución del flujo de trabajo.

  2. Simplificar el look and feel del flujo de trabajo al usar Servicios de Datos de SAP.

  3. Retener las mismas fortalezas dadas al usar Python, ya que toda la codificación realizada en SAP HANA está hecha usando el Lenguaje de Consulta Estructurado (SQL).

¿Merece SAP HANA la corona como el rey de las implementaciones de ciencia de datos? Dinos tus opiniones en los comentarios. No discutiremos los detalles de cada etapa de la implementación ya que esto va más allá del alcance de un solo artículo. ¡Planeamos lanzar una serie extensa detallando cada etapa de nuestro enfoque así que sigue al tanto!

EspañolEnglish