 Básicamente vamos a utilizar una distribución de Hadoop, en nuestro caso la distribución de Microsoft, que es básicamente la distribución de Hortonworks. Y vamos a utilizar SQL Server para prácticamente todas las tareas, tanto el motor relacional para el data warehouse final como SSIS para las ETLs y por supuesto análisis en concreto, análisis tabular para la parte de analítica de BI y las herramientas colaborativas que conocimos todo SharePoint y Excel. Esa era un poquito la idea. ¿Qué pinta tiene la distribución de Microsoft? No voy a entretenerme demasiado con ella, creo que algunos de vosotros ya la conocéis y simplemente lo único que os voy a enseñar es que es una distribución normal. Voy a conectarme rápidamente, este va a ser un poco la prueba de fuego, vamos a ver si tenemos conexión, parece que sí. Por cierto, ¿qué tal me avisa ahí atrás? Porque no estoy del todo seguro de que a veces escucho mi retorno y otras veces no, ¿se oye bien? Ahí deberíamos estar. En realidad es el pelo lo que está. Bien, aquí he entrado en mi cuenta de Azure o Windows Azure HDInsight, tengo un cluster con muy pequeñito tres nodos, me voy a conectar a él, parece que estamos teniendo suerte. Una de las cosas que preparé para esta sesión, por si tenía problemas de conectividad aquí, fue montar lo mismo en una máquina virtual. Si después de la sesión tenéis alguna duda, alguna cuestión de cómo se monta esto en un cluster Windows, en una máquina virtual on-premise, me pilláis, creo que me reconoceréis bastante bien y me preguntáis directamente, os enseño la máquina virtual si queréis, etcétera. No lo voy a hacer en la sesión porque voy a intentar adelantar un poquito de tiempo. Entonces aquí tenemos esta interfaz de usuario tan, iba a decir metro, más bien Windows 8 style, no sé que lo lleguemos, desde la cual tenemos acceso a ciertos parámetros de configuración de modo gráfico intuitivo, podemos configurar los puertos para ODBC, el FTP, la configuración del cluster, por ejemplo la alta disponibilidad, configurar que automáticamente se lleve las copias de checkpoint del nodo secundario a un blob en azure y se encargue de sincronizarlo después, la configuración de los blogs de azure para poder trabajar directamente desde Hadoop contra los blogs de azure, cuestiones interesantes. Hay una cosa aquí en esta caja de la consola interactiva, no sé si esto es lo cuento a los que no lo hayáis visto mucho, desde aquí tengo un intérprete de Javascript que puede lanzar, trabajar con Hadoop, es una de las contribuciones que ha hecho Microsoft al proyecto Apache Hadoop y un intérprete, bueno, no, una interfaz contra el haiz, en realidad esto creo que solamente se utiliza para hacer ritmos, en la vida real no lo he visto, nunca yo no lo voy a utilizar evidentemente, pudiendo conectarme al escritorio remoto o trabajando de otra manera que ya veremos. Mientras ahora el escritorio remoto para conectarme a la máquina, si os voy a contar es cierto que hay algunas cosas bastante interesantes para nosotros los desarrolladores que estamos más acostumbrados al mundo Microsoft, por ejemplo tenemos una API en Cessar que nos permite lanzar jobs, tanto de Hive como jobs normales MapReduce, nos permite acceder al HDFS, al sistema de ficheros, etcétera, vale, o sea sí que hay ciertos añadidos, pero lo único que quiero que tengáis claro en realidad es que me es igual trabajar con una distribución, con esta distribución que con una distribución de Clodera, Hortonworks, cualquiera, vale, de hecho si ahora mismo nuestro proyecto que ya lo veréis más adelante, quisiéramos cambiarlo y quitar la parte de Microsoft no habría problema, vale, los conectores de Hive, etcétera todo funcionaría con cualquier versión. Ok, aquí estoy conectado al name node que también es uno de los data nodes en este caso, vale, y podría conectarme evidentemente por escritorio remoto a los otros dos nodes y desde aquí pues tengo mi, pues tengo el cliente, o sea el ejecutable de Hadoop, que de hecho, vale, aquí tenéis, veis que por defecto, esto es tal como crear la máquina por defecto, tenemos tanto Hadoop como Hive, PIG y Pichlating, Mahoot, Pegasus, etcétera, vale, esas ya vienen desplegadas por defecto, vale, con lo cual podéis, repito, a golpe click y de momento totalmente gratis, empezar a cacharrear con ello, esto a nosotros nos salvó muchísimo tiempo en nuestro caso. Hombre, si no hubiéramos ido seguramente a AMR, pero vamos, nos vino muy bien. Lo voy a dejar aquí, no sé si queréis y si no sobra tiempo y si tenéis alguna pregunta, voy a dejar la sesión abierta por si queréis ver algo más pero simplemente quedaros con que es un cluster de Hadoop normal, vale, no voy a tener que llegar por que perdí el punto de las slides, parezco nuevo, vale, entonces ya hemos visto un poquito lo que es, como es, vamos a ver como es la implementación actual, vale, la implementación actual básicamente es esto, por una parte los datos de los aerogeneradores con un cargador, los cargamos en cualquier, o sea, tenemos, cualquiera de los formatos los cargamos en un mismo servicio de Azure Storage, de almacenamiento en Azure. Este es un punto interesante porque como puede haber múltiples tecnologías de aerogeneradores, podemos tener los datos diferentes, por eso aquí nos viene muy bien el no tener un formato predefinido para los ficheros de datos que nos vienen de cada uno de los aerogeneradores, vale, hay muchos fabricantes, muchas tecnologías, vale, y de hecho esto a futuro pues la idea es precisamente que abarque otras tecnologías, solar, etcétera, vale. Bien, de ahí lo cargamos a nuestro cluster de Hadoop, el que ahora mismo tenemos en Azure, al HDFS, ejecutamos unos más predios que hacen una limpieza muy, muy básica, vale, y dejamos el dato básicamente casi rau en unas tablas de Hive, vale, bien, a partir de aquí es donde nosotros decidimos darle un poquito más de chicha, vale, con lo cual hicimos una carga en un Data Warehouse Relacional con una parte de esos datos, vale, y con unas transformaciones, esas transformaciones son las que venían impuestas un poco del negocio, una serie de validaciones, una serie de normalizaciones, de hecho ahí hay bastante trabajo, un trabajo que por cierto hizo uno de nuestros compañeros, José Vizoso hizo un trabajo espectacular y en un periodo de tiempo brevísimo, y lo hemos implementado mediante paquetes de integration service, vale, en un momentito os voy a enseñar cómo eran, vale, por tanto lo que hemos hecho ha sido contarnos desde los paquetes de integration services a Hive, lanzar queries Hive, procesarlo, trabajar con ello y insertarlo en nuestro Data Warehouse, vale. Bien, a partir de ahí construimos, a partir de ese Data Warehouse construimos unos, voy a decir unos cubos, porque si estáis más familiarizados no son cubos en realidad, no son estructuras multidimensionales, pero hagámonos un poco la idea de que son cubos, vale. Bien, lo último es, ¿qué pasa si queremos ver lo que hay en Hive? Porque yo se ha dicho que aquí hay una ligera, bueno, una bastante grande discrepancia entre lo que tenemos aquí en Hive y lo que tenemos en el Data Warehouse, porque ha pasado algunas validaciones y unas normalizaciones. ¿Qué pasa si quiero comprobar que eso está bien? ¿O qué pasa si quiero ver el dato concreto del aerogenerador? Lo que voy a hacer es lanzar consultas directamente a Hive, pero claro, un usuario de negocio normalmente no va a hacer eso, así que puedo utilizar el conector de Excel contra Hive y puedo utilizar incluso Power Pivot, incluso Power Pivot a través de Power Pivot contra Hive directamente, vale. Es uno de los escenarios que hay, sobre todo en el caso de la validación nos ha venido muy, muy, muy bien, vale. Vale, vamos a echarle un vistazo un poco más detallado, no voy a entrar en muchos detalles de implementación, vale. Simplemente que veáis, en la solución, pues, bueno, tenemos, evidentemente, el importador de datos, tenemos aquí los MapReduce, los hicimos en César, los hicimos en César tirando de la API de streaming de Hadoop, vale. Esto es algo que podemos hacer. No es nada especial de integración que nos haya ofrecido Microsoft. Nosotros ya sabéis que podemos ejecutar tareas de MapReduce simplemente en cualquier idioma con un ejecutable, con lo cual yo compilo lo que sea en cualquier idioma, en el lenguaje que más rabia me dejo, a ese ejecutable y lo paso a través de la API de streaming. Es lo que hicimos en este caso, vale. Así que aquí veis las clases de los MapReduce y sus clases de test. Perdón. Aquí tenemos una de las partes más importantes del proyecto, que es la parte de la CTA de integración, vale. No voy a entrar en los detalles del particionado, que lo tenemos en esta otra parte. Si al final os interesa cualquier cosa en la que no haya entrado en detalle, por favor me lo preguntáis en el turno de preguntas, vale. Pero lo que sí tenemos aquí es una tarea para el data loading, para cargar todos los datos. Evidentemente es una tarea de carga diferencial, vale. Es una tarea de carga diferencial que lo que hace es, bueno, preguntar cuántos días de datos hay en el repositorio de Azure, vale. Bueno, perdón, ya en este nivel, ya en Hive, preguntar cuántos días de datos hay de diferencia entre lo que yo tengo y lo que hay ahí almacenado. Y empieza a cargar los datos. Aquí la única cosa que os quiero decir es, es importante utilizar, si vais a utilizar Hive directamente, el particionado dinámico, vale. Nosotros aquí lo que utilizamos es particionado dinámico por temas más que evidente de rendimiento y de administración, vale. Entonces, las consultas que yo lanzo al Hive tienen que ser dinámicas, tienen que ser parametrizadas, sí. En los paquetes vais a ver que aquí hay este FDX que veis en estas tareas, que son las que generan la consulta que lanzamos a Hive. De hecho, si le he hecho un vistazo a las variables, veréis, por ejemplo, la consulta de Hive, esta es una consulta de Hive para parametrizar, indicándole el nombre de la partición, vale. Vale, toda la validación, no voy a entrar en el paquete porque tardaría bastante en hacerlo, pero toda la validación que hemos hecho, es prácticamente toda la validación del grueso, es en CESAR para aplicar las reglas de negocio y de ahí no insertamos directamente al data warehouse. No voy a entrar más en detalle. La otra parte interesante, bueno, evidentemente tenemos una serie de réports tradicionales, no me voy a entretener en ellos, pero sin esto. La definición del proyecto hola, es un proyecto tabular, no es un proyecto de cubros, vale, es lo que os decía antes. ¿Por qué? Por algo que pensamos, no sé si recordaréis una de las slides que hemos visto antes, en la que salía en la parte de los cubos, y hay una especie de frecha a la nube, una de las ideas que tenía el cliente era llevar los servidores de análisis también a máquinas espirituales en la sure. Bien, si hacemos eso en un entorno normal, ¿cuál es el problema que tenemos? Yo soy uno de los mayores defisores que os vais a imaginar de cualquier sistema. Yo voy a decir la sure, pero de casi cualquier nivel. Pero hay una cosa que a mí, como profesional de los datos, me pone muy nervioso. Yo no puedo controlar los discos. Le parece una tontería, pero hay ese equivoco de que cuando trabajo con cubos todo está agregado el memón. Eso no es cierto, no es correcto. Y muchas veces tenemos que ir a discos. Por tanto, para ahorrarnos el problema de rendimiento de que no sé exactamente que voy a tener un nube de discos, lo que decidimos hacer es por llevarlo a este nuevo modelo tabular. A la parte que nos efectiva otra serie de cosas, un rendimiento espectacular, tiene la pega de que todo está en memoria, pega pero a la vez es una ventaja. Con lo cual, ya me puedo preparar a tener máquinas con mucha memoria. Pero claro, yo puedo escalar bien a nivel de memoria y se los cae. A nivel de discos, realmente, no sé el rendimiento que voy a tener. No puedo recurrir a los trucos que hacemos normalmente. Con lo cual, de hecho, esta es una de las decisiones de las que más satisfecho me siento después del proyecto. Y es algo que os recomiendo que tengáis en cuenta cuando verdéis un proyecto en el cual queráis darle esta parte de DI. ¿Qué conseguimos con esto? Y muy rápido, no os voy a enseñar los informes típicos, simplemente una conexión. Pues bueno, yo me puedo conectar. Esto no es... No sé por qué no me aparece aquí. Da igual, tengo aquí de otras formas. Bueno, aquí voy a enseñaros algo que trabajo con una cantidad muy reducida de datos, muy muy reducida. Porque lo estoy haciendo totalmente local en mi portátil. La frase famosa de los experimentos en casa y con gasiosa. Entonces me estoy conectando al modelo tabular que generábamos. Y al final lo que tenemos evidentemente como si fuera cualquier cubo es una pivot table en la que el usuario puede hacer las consultas que quiera. Por ejemplo, vamos a coger la cantidad de activaciones de alarmas que ha habido por... por ejemplo por fecha y por geografía. Y dentro de geografía vamos a poner el aerogenerador concreto. Por ejemplo en Europa. Bueno, sabemos que está dentro de España. Navarra, aquí está el de Moncayuelo. Tiene estos aerogeneradores. Y estas son las alarmas que ha levantado. Podríamos explorar un pivot table normal. Este fue un buen momento. Este fue un buen momento cuando empezamos a enseñar esto al usuario... al usuario de negocio. Y realmente, de hecho, es uno de los momentos yo creo de... siempre todos los años tiene una serie de momentos especiales a nivel profesional. Este fue uno de ellos. Porque realmente, nos había costado mucho a un grupo de... de la gente menos técnica que entendiera que era lo que queríamos hacer. Estaban acostumbrados al informe de toda la vida. Y bueno, podían llegar a entenderlo de no perder los datos secundales. Bien, genial. Pero... no llegaban a entender cuál era el problema con los repos que no hay ningún problema. Pero queríamos dar algo más, la capacidad de explorar los datos. Cuando estábamos haciendo la primera prueba, puedo garantizar que vi cómo se le iluminaban los ojos a uno de los chicos que estaba viendo y dice es que ya entiendo a qué os referíais. Bien, hemos conseguido darles esto. Les hemos conseguido dar evidentemente también como tenemos un modelo tabular, pues tiene un modelo de PowerView, con lo cual pueden generar sus informes de PowerView automáticamente. Por ejemplo, vamos a decir que filtren aquí solamente por los aerogeneradores de Moncayolo. Por ejemplo, si traemos a Moncayolo vamos a coger Danferline también. Cogemos Danferline. Se pueden cacherrar. Vamos a quitar este aerogenerador. Vamos a quitar este. Vamos a quitar este. Evolucionan el tiempo. Es decir, darles un mecanismo. Bueno, perdona que no me entretenga en la parte de los informes. No es nada de lo que os quiero enseñar. Simplemente, os quiero enseñar que lo que le queríamos dar era algo que no tenían ahora mismo, ¿vale? Y que vino un poco de la mano de algo, de Hadoop, de este intento por no perder esos datos, ¿vale? Con un poquito de integración, pero que realmente al final fue bastante sencillo. Y esta era la idea que teníamos inicial para el proyecto. ¿Vale? La verdad es que conseguimos implementarlo bastante rápido. Una vez más, os digo, la aproximación por prueba de concepto nos funciona muy, muy bien. ¿Vale? ¿Vale? Con lo cual, al final, el usuario, pues bueno, le teníamos ya contento, bastante contento solamente por la parte de data warehousing. Y hemos movido a un sistema mucho más rápido, un sistema analítico, tabular, no tiene los problemas que tenía con la parte de los informes y además un sistema que puede mantener tanto la aproximación de informes fijos como una aproximación de descubrimiento de esa información. ¿Vale? Bien, una de las cosas que nos preguntaron en su momento era, ¿vale? ¿Pero un momentito? ¿Cinco? ¿Vale? ¿Vale? Creo que, hay algo que no acabo de entender, vamos a ver un momentito. Bien, vamos a a saltar aquí. ¿Vale? Es que era lo que me contaba. Vale, creo que, vale, vamos a continuar por aquí de todas formas, voy a abreviar una parte. Vamos a hablar de, yo creo que es la parte que más nos interesa. Y hemos visto cómo hemos podido conseguir hacer aquello, lo que bueno, le teníamos un poco de dudas de si podríamos hacerlo, la verdad es que es bastante más sencillo de lo que pesábamos todos al principio, ¿vale? Un momento. Empezamos a pensar en un montón de cosas que podríamos hacer. Entonces, bien, aparte, ¿qué podemos hacer a partir de aquí? Hay una en la que, evidentemente, ya se está trabajando, que es hacer nuevos procesos analíticos con información que antes no teníamos. Esos datos secundales los podíamos almacenar, a lo mejor, una semana en el PLC, en la propia estación, ¿vale? Pero luego los pedíamos, no podíamos almacenar toda esa información. Ahora los podemos utilizar para hacer, por ejemplo, modelos. Pensad algo muy sencillo. En el primer keynote, ¿vale? Se comentaba un ejemplo de unos drills, unas perforadoras. Se hablaba del desgaste de las piezas, la monitorización, ¿vale? Bien, tenemos el mismo escenario en el caso de los aerogeneradores, casi cualquier caso de instrumentar el mecanicón. Mirad, cuando se compra un aerogenerador, pues, evidentemente, para poner un ejemplo más sencillo, una cosa que el ministro del fabricante es la curva de potencia. Tú sabes que para tal velocidad de mantenimiento, para tal ángulo de las palas, vas a tener tal potencia. ¿vale? Con eso generas una curva. Y, evidentemente, si algún día parte del sistema se va fuera de esa curva, algún momento hay una lectura que indique que está fuera de esa curva, nos va a indicar que hay una anomalía y puede ser importante, a lo mejor, hacer una parada, urgente a lo mejor por mantenimiento. De hecho, estuve muy tentado de poner una captura de pantalla o de un vídeo o una foto de un aerogenerador fallando, catastroficamente. Al final me ha parecido demasiado morboso, preferí hacerlo, pero si tenéis alguna duda, créenme, esos bichos son muy grandes, ¿vale? Y uno de esos, reventando, es algo bastante espectacular de él y no lo queremos, no queremos que suceda, ¿vale? Es bastante peligroso. Por tanto, es algo que cae de cajón en contrastar tus datos contra los datos del modelo, ¿vale? ¿Cuál es el problema? Los aerogeneradores tienen desgaste, ¿vale? Todas las piezas móviles pocas cosas, y me ocurre con el concepto de pieza móvil tan magnificado como un aerogenerador, como una turbina, ¿vale? Tienen desgaste. Bien, lo que podemos hacer ahora que antes no podíamos hacer es capturar la información secundal de todos los días de todos los aerogeneradores, ¿vale? Generar la curva de potencia, hacer cierta normalización de esa curva de potencia, pero con esto lo que conseguimos es que todos los días yo puedo consultar mi estatus de mi aerogenerador contra el modelo que sé que corresponde no a un aerogenerador genérico modelo 3500 sino al aerogenerador concreto a 1,01 del Parque de Moncayuelo. Y eso me permite saber mucho mejor si va a haber algún problema si tengo que anticipar una tarea de mantenimiento o ver el desgaste que va teniendo históricamente. Este es un ejemplo, el más sencillo, hay muchos ejemplos que podemos hacer antes no podíamos hacerlos, ¿vale? Entonces tenemos lo mejor de los dos mundos, la parte analítica y la parte de modelos gracias a los datos secundales. Otra parte, no sé si recordáis esta slide que la puse antes. Hay algo de lo que no había hablado. Ahí arriba veis esa línea streaming site y eventos, ¿vale? Esta parte, estamos trabajando en un sistema para utilizar streaming site que es, si no lo conocéis os recomiendo que le echéis un vistazo al topic, a la gestión complex event processing, en los sistemas C, ¿vale? En el caso de Microsoft, su producto se llama streaming site y es lo que vamos a ampliar para esta solución. Básicamente supone que en lugar de lanzar una consulta contra una base de datos, por ejemplo, dame cuántas alarmas ahora mismo están abiertas y no tienen cierre, ¿vale? Yo creo que voy a hacer exponer una consulta, lo que llaman en inglés una standing call, pongo esa consulta y las consultas van a llegar hasta, o sea, las filas van a llegar hasta esta consulta y van a servir para... y van a filtrarse en base a esa consulta con lo cual voy a poder detectar en tiempo real y sin tener que hacer un polling contra la base de datos en alguna condición anómala, ¿vale? Si juntamos esto con la generación de modelos que os acabo de contar tengo un sistema que va a poder lanzar consultas contra ese modelo que he generado la noche anterior, ¿vale? y generar alarmas en tiempo real y, además, volver a alimentar mi sistema Hadoop, ¿vale? Bien, y la última y más interesante, esta tiene mucho que ver con una... con una noticia de la semana pasada. La semana pasada hubo uno de los eventos más importantes anuales de SQL Server, SQL Pass, bueno, el Summit del SQL Pass, en el cual el profesor David dio una charla espectacular sobre un producto del cual, bueno, se sabía un poquito, se habían oído rumores pero prácticamente lo vino a presentar ahí, que es PolyBase. PolyBase es algo que nos interesa muchísimo en este proyecto y creo que os puede interesar a vosotros mucho. Supongo que muchos de vosotros conocéis Impala y conocéis la... toda esta línea de productos que se están intentando buscar para tener menos latencia en mi acceso, en mis consultas a HDFS, ¿vale? Bien, PolyBase es una aproximación a eso un poco diferente por parte de Microsoft. Mira así, voy a simplificar mucho pero una manera de trabajar integrando la parte relacional, por ejemplo, ese Data Warehouse que tengo con la parte de Hadoop para una sola consulta, ¿cuál sería? Pues lanzar unos MapReduce constantes al Hadoop, ¿vale? Mediente Scoop, ¿vale? De ese modo, podríamos obtener los datos y cargarlos en nuestro sistema relacional. ¿Vale? Scoop tiene una serie de problemas que me encantaría comentaros, no tengo tiempo pero tiene problemas de escalabilidad. ¿Vale? En el fondo, si, por ejemplo, tengo un ejemplo de un Parallel Data Warehouse, un SQL Parallel Data Warehouse, que es un contra el Scoop, ¿vale? para traerme datos, ¿vale? va a tener que pasar por el control node y por Scoop. Esos dos puntos, ¿vale? van a ser puntos limitantes, no van a ser paralizables, ¿vale? Básicamente, esto es lo que vamos a tener, todas las consultas del Data Node, irán a Scoop y llegaran al control node del Parallel Data Warehouse que será el que las asignará los datos, ¿vale? Bien, lo que vamos a tener con Polyvase y termino muy rápido, va a ser lo siguiente, la posibilidad de lanzar una consulta SQL con una join a tablas que están en Hadoop, ¿vale? Él decidirá automáticamente si coge las filas que hay en SQL Server, las lleva a Hadoop y lo resuelve todo con más predios en Hadoop y se trae los resultados, o si se trae lo que haya de Hadoop y lo resuelve, lo va a resolver en Core Optimizer, el optimizador de consultas porque va a tener información estadística de cuántas filas cumplen los predicados, es decir, es una remodelación de SQL Server para poder tener en cuenta la cardinaridad de tiempos de ejecución de Hadoop. Esto es espectacular, ¿vale? ¿Va a ser paralelizable de verdad? ¿Esto sería un ejemplo de Scoop? ¿Vale? ¿El gato intentando comerse toda la comida? ¿Vale? Y este sería el ejemplo de lo que tendríamos con Polyvase la paralelización al final de las tareas, ¿vale? Con lo cual, echarle un vistazo a Polyvase ahora mismo es la tecnología de lejos que más me llaman en este mundo. De hecho, no sé, vosotros seguro que sí como yo ya habéis con la policía, desconectéis el portátil, salís al pasillo, algún cubículo, alguien le decís mirad lo que acabo de ver, aunque sea alguien que está limpiando por ahí, ¿vale? Ese momento lo he tenido con esta tecnología, ¿vale? Me parece algo espectacular, todavía no está 100% disponible, la primera versión va a ser solo para el Data Warehouse. ¿Vale? Pero se va a trabajar y vamos a tenerla en SQL Server Normal. ¿Vale? Entonces, ya para finalizar, ¿vale? ¿Qué fue bien? Principalmente os recomiendo que tengáis en cuenta como lecciones aprendidas o la Azure Elastic Map Reduce en una solución en la nube, a nosotros nos vino muy bien hasta el punto de que ya no queremos la solución on-premise, vamos a tirar por una solución en Cloud Computing, ¿vale? El tema de moderno tabular por el tema de la memoria, nuevamente por irnos a Cloud, ¿vale? Y las ETL es mediante SSIS con conexión ¿vale? El que quizás no hubiera hecho de la misma manera posiblemente el trabajar con los Map Reduce de CESAR para la carga, posiblemente a día de hoy los hubiera hecho con unos seres personalizados sobre Hive, ¿vale? Desarrollados en Java, posiblemente, ¿vale? Hay bastante diferencia sobre toda depuración, etcétera, ¿vale? Entonces, simplemente os voy a dejar aquí las referencias, ¿vale? Tenéis mi dirección de correo para cualquier duda o cuestión que tengáis pues me vais a ver por aquí, así que me podéis preguntar lo que queréis, ¿vale? Sobre todo el tema de PolyBase que, de verdad, ha sido un poco apresurado, pero creo que es una de las cosas más interesantes de toda la sesión, ¿vale? Muchas gracias por aguantarme, ¿vale? Gracias a ti, Pablo. Tenemos tiempo para... Tenemos tiempo para una pregunta rápida. Hay una pregunta. Te quería preguntar si la carga ha desdejado al Data Warehouse si eso no es un bottleneck o preguntarte cómo lo que hagáis ahora mismo me parece entender si el Data Warehouse tiene toda la información memoria lo cual me da a entender que no. Perdona, el Data Warehouse es una base de datos relacional. Después tengo el modelo tabular, ese es el que lo tiene todo en memoria. ¿Vale? Y para cargar el Data Warehouse si es una base de datos relacional imagino que no es distribuida. Actualmente no. Lo cual quiere decir que tampoco estás cargando bititas en ese Data Warehouse o que reducies de... Por supuesto, por supuesto. Lo que tengo es una información agregada. De hecho, ahora mismo en el Data Warehouse estamos trabajando con información que es minutal. Es básicamente lo que teníamos en el otro sistema. ¿Vale? La ventaja es que ahora podemos primero construir más a partir de ahí y jugar con la resolución porque ya no perdemos los datos. Ahora puedo decidir cargarlo dos minutal, minutal o lo que quiera. Muchas gracias Pablo. Muchas gracias a vosotros. Nuevamente gracias a todos.