sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB Analytics Series:SlamData:ejecute SQL y cree informes directamente en MongoDB

Esta es una publicación de invitado de John A. De Goes. John es el CTO y cofundador de SlamData. Cuando no está trabajando en problemas complicados de compilación para SlamData, puede encontrar a John hablando en conferencias, blogueando, pasando tiempo con su familia y haciendo actividades al pie de las Montañas Rocosas. Póngase en contacto con John en [email protected]

El alojamiento de MongoDB ha tenido un gran éxito en la comunidad de desarrolladores, en parte porque les permite almacenar estructuras de datos directamente en una base de datos moderna, escalable y rápida. .

No es necesario asignar esas estructuras de datos a tablas rígidas, predefinidas y planas que deben volver a ensamblarse en tiempo de ejecución a través de muchas tablas intermedias. (Descrito de esa manera, el modelo relacional suena un poco anticuado, ¿no?)

Desafortunadamente, el software de informes y análisis del mundo no puede dar sentido a los datos posrelacionales. Si no es plano, si no es todo uniforme, ¡no puede hacer nada con él dentro de las soluciones heredadas de análisis e informes!

Ese es un problema real, porque los desarrolladores crean aplicaciones MongoDB que generan toneladas de datos. Eventualmente, las empresas querrán dividir estos datos, crear informes y recopilar información.

Puede hacer todo eso hoy, pero necesita escribir montones de código, transformar y replicar los datos de MongoDB en otra base de datos o almacén de datos, o de lo contrario pasar por un dolor y sufrimiento intenso y prolongado del tipo que me gusta evitar.

Es exactamente por eso que fundé SlamData. SlamData es una empresa de código abierto que desarrolla una herramienta de informes y análisis de última generación para datos NoSQL.

Acabamos de lanzar la versión beta de SlamData, que es compatible con MongoDB. En esta publicación, hablaré sobre cómo puede usar esta versión beta para consultar MongoDB usando SQL común, cuáles son algunas de las limitaciones, cómo se compara SlamData con la competencia y hacia dónde se dirige el proyecto.

Obtención e instalación de SlamData

Puede compilar SlamData a partir del código fuente en Github. Pero si no te gusta jugar con el código fuente, te recomiendo que descargues los instaladores de la GUI del sitio web de SlamData.

Hay instaladores preconstruidos para Linux, OS X y Windows, y vienen con todo lo que necesita (¡excepto una instancia en ejecución de MongoDB!).

Durante el proceso de instalación, el asistente le pedirá el URI de conexión de MongoDB (que puede incluir un nombre de usuario y una contraseña), la base de datos específica que desea usar (no se preocupe, puede agregar más más adelante) y en qué parte de SlamData sistema de archivos que desea montar esa base de datos (que puede dejar como '/', la ruta raíz).

Después de la instalación, puede iniciar SlamData con un doble clic. Tenga en cuenta que en realidad hay dos componentes en SlamData:el front-end y un servidor liviano que se conecta a MongoDB. De manera predeterminada, ambos se instalarán y ambos se iniciarán cuando haga doble clic en SlamData.

Interfaz de usuario de SlamData

El front-end de SlamData, que se muestra en la captura de pantalla anterior, es una interfaz visual para todo el poder de SlamData (también hay un REPL, para aquellos que prefieren una interfaz de línea de comandos).

El árbol del sistema de archivos le muestra todas las bases de datos montadas, así como las colecciones dentro de estas bases de datos. Es un recordatorio visual de todos los datos que puede consultar, aunque en versiones posteriores podrá hacer mucho más con el sistema de archivos.

La interfaz del editor le permite crear cuadernos, que son colecciones de texto (Markdown), consultas (SQL) y visualizaciones (gráficos). Un bloc de notas es como un informe, excepto que, a diferencia de la mayoría de los informes, puede ser interactivo y puede actualizarse a partir de datos en vivo.

Escribir Consultas

¡Es hora de escribir algunas consultas!

En estos ejemplos, supondré que tiene el conjunto de datos de código postal cargado en su base de datos de MongoDB, que puede descargar del sitio de MongoDB.

Este conjunto de datos tiene información básica sobre los códigos postales, como dónde se encuentran (ciudad, estado, geo) y su población.

Retrocedamos las primeras 5 entradas zip:

SELECCIONE * DESDE cremalleras LÍMITE 5

{ “_id”:“35004″, “ciudad”:“ACMAR”, “ubicación”:[-86.51557, 33.584132], “población”:6055, “estado”:​​“AL”}

{ “_id”:“35005″, “ciudad”:“ADAMSVILLE”, “ubicación”:[-86.959727, 33.588437], “población”:10616, “estado”:​​“AL”}

{ “_id”:“35006″, “ciudad”:“ADGER”, “ubicación”:[-87.167455, 33.434277], “pop”:3205, “estado”:​​“AL”}

{ “_id”:“35007″, “ciudad”:“KEYSTONE”, “ubicación”:[-86.812861, 33.236868], “pop”:14218, “estado”:​​“AL”}

{ “_id”:“35010″, “ciudad”:“NUEVO SITIO”, “ubicación”:[-85.951086, 32.941445], “pop”:19942, “estado”:​​“AL”}

¿Cuáles son las ciudades que tienen los 5 códigos postales más poblados? Pan comido:

SELECCIONE ciudad, pop DESDE zips ORDEN POR pop DESC LÍMITE 5

{ “_id”:“60623″, “ciudad”:“CHICAGO”, “pop”:112047}

{ “_id”:“11226″, “ciudad”:“BROOKLYN”, “pop”:111396}

{ “_id”:“10021″, “ciudad”:“NUEVA YORK”, “pop”:106564}

{ “_id”:“10025″, “ciudad”:“NUEVA YORK”, “pop”:100027}

{ “_id”:“90201″, “ciudad”:“BELL GARDENS”, “pop”:99568}

El dialecto de SQL de SlamData (llamado SlamSQL) tiene soporte completo para matrices y documentos anidados, y puede acceder a ellos utilizando la notación Javascript ordinaria (por ejemplo, SELECT foo.bar.baz).

A veces, querrá aplanar una matriz para poder profundizar en el contenido de esa matriz. En el conjunto de datos zips, hay un campo de matriz de ubicación que contiene una ubicación geográfica. Para aplanar esta matriz, simplemente use el operador estrella ('*') como índice de la matriz:

SELECT loc[*] FROM zips LIMIT 1

{ “_id”:{ “$oid”:“53ecf39574d2394acbd4b6f1″}, “loc”:-86.51557}

Finalmente, usemos el operador GROUP BY de SQL para resumir la población de todos los códigos postales de cada ciudad y luego extraigamos las 5 ciudades más pobladas:

SELECCIONE ciudad, SUMA(pop) COMO pop FROM zips GRUPO POR ciudad ORDEN POR pop DESC LÍMITE 5

Genial, ¿eh?

La mayoría de las funciones de MongoDB actualmente son compatibles con la versión beta, aunque utilizan sus nombres SQL estándar (o sus nombres PostgreSQL, según sea el caso). Estos incluyen lo siguiente:

  • CONCAT, INFERIOR, SUPERIOR, SUBCADENA
  • DATE_PART
  • CONTAR, SUMA, MIN, MAX, PROMEDIO
  • +, -, *, /, %
  • ARRAY_LENGTH

Limitaciones de la versión beta

La versión beta se llama "beta" por una razón:no implementa todo SlamSQL y puede tener algunos errores en las partes de SlamSQL que implementa.

En particular, debe prestar atención a las siguientes limitaciones:

  • Aunque se admite GROUP BY , las cláusulas HAVING aún no se han implementado.
  • Todas las funciones que no son compatibles de forma nativa con Aggregation Pipeline (por ejemplo, la longitud de la cadena) aún no son compatibles.
  • Todavía no se admite la selección de elementos de matriz individuales (por ejemplo, SELECT loc[0] FROM zips) debido a un problema conocido en MongoDB.
  • DISTINCT y otras operaciones a nivel de conjunto como UNION, UNION ALL, aún no son compatibles.
  • Los JOIN aún no son compatibles con la versión lanzada oficialmente (aunque tenemos una rama en Github que los admite, para aquellos a quienes les gusta estar al tanto borde!).
  • Hay varios casos extremos que aún no se han implementado.

Cómo se acumula SlamData

Actualmente, no hay muchas herramientas en el mercado para realizar análisis en MongoDB.

En el mundo del código abierto:

  • Están los controladores MongoDB (disponibles en Python, Java, etc.), pero estas bibliotecas están diseñadas para desarrolladores, no para analistas o científicos de datos, y usted necesita escribir código para usarlos.
  • PostgreSQL tiene un contenedor de datos externos de código abierto para MongoDB aportado por CitrusData. En este momento, solo puede insertar filtros simples en MongoDB. Todas las demás operaciones requieren la transmisión de datos de MongoDB a PostgreSQL.
  • MoSQL es una herramienta de código abierto que simplifica ETL de MongoDB a PostgreSQL. Debe definir esquemas de forma rígida, aplanar sus datos y evitar matrices, así como mantener una infraestructura separada para análisis e informes.

En el sector comercial:

  • Data Studio de AquaFold tiene un cliente MongoDB. No está claro exactamente qué empuja al conductor, aunque parece ser algunas expresiones, filtros y tal vez agrupaciones. Sin embargo, para algunas operaciones, los datos deben transmitirse de vuelta al cliente, lo que lo hace poco práctico para muchas aplicaciones.
  • JSONStudio tiene una interfaz que le permite crear "visualmente" consultas de canalización para el marco de agregación de MongoDB, pero está sujeto a las mismas limitaciones que la agregación framework, y no se beneficia de la estandarización y declaratividad de SQL.
  • Simba Technologies tiene un controlador ODBC de MongoDB. Puede empujar hacia abajo algunos filtros y agregaciones a MongoDB, pero todo lo demás debe transmitirse al controlador para su posterior procesamiento.
  • Progress Software tiene una familia de productos de conectividad de datos llamada DataDirect, con un conector MongoDB. No está claro cuánto empujan estos controladores a MongoDB, pero probablemente sean muy similares al controlador de Simba y requieren que cree esquemas.
  • UnityJDBC tiene un controlador JDBC para MongoDB, pero se basa en la transmisión para hacer la mayor parte del trabajo (excepto el filtrado sin formato y muy simple).

SlamData se compara muy bien con las ofertas comerciales y de código abierto:

  1. SlamData es 100 % de código abierto, sin comprar ni licenciar nada.
  2. SlamData envía el 100 % de cada consulta a MongoDB, sin transmitir nada al cliente. Nunca.
  3. SlamData no requiere definición de esquema, asignación de esquema ni ETL de ningún tipo. Solo funciona con los datos tal como ya existen en MongoDB.
  4. SlamData brinda a los documentos anidados y matrices un estado de primera clase. Es fácil profundizar en cualquier estructura usando una extensión de SQL limpia, simple y obvia (por ejemplo, foo.bar.baz[2].fuz).
  5. SlamData tiene una interfaz elegante pero liviana que le permite crear informes interactivos, completos con gráficos. Es fácil entregar el front-end a "esa persona" en su equipo u organización, lo que lo libera para hacer lo que le pagan en lugar de escribir código para generar informes.

Hoja de ruta

A principios de octubre, planeamos lanzar la versión de producción de SlamData.

En esta versión, habremos abordado muchas de las limitaciones de la versión beta, mejorado la forma en que podemos compilar SQL en MongoDB y hecho que el front-end sea mucho más fácil de usar y más potente.

Como proyecto de código abierto, nuestro éxito se reduce a la adopción. Si desea ver que SlamData continúe evolucionando hasta convertirse en la mejor herramienta de código abierto para análisis e informes de NoSQL, descargue SlamData, bifurque o marque los repositorios y comente cualquier error que encuentre o funciones que le gustaría ver agregadas.