MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Série MongoDB Analytics :SlamData - Exécutez des rapports SQL et créez des rapports directement sur MongoDB

Ceci est un article invité de John A. De Goes. John est le directeur technique et co-fondateur de SlamData. Lorsqu'il ne travaille pas sur des problèmes de compilation délicats pour SlamData, vous pouvez trouver John prenant la parole lors de conférences, bloguant, passant du temps avec sa famille et étant actif dans les contreforts des Rocheuses. Contactez John à [email protected]

L'hébergement MongoDB a connu un énorme succès dans la communauté des développeurs, en partie parce qu'il permet aux développeurs de stocker des structures de données directement dans une base de données rapide, évolutive et moderne .

Il n'est pas nécessaire de mapper ces structures de données sur des tables rigides, prédéfinies et plates qui doivent être réassemblées au moment de l'exécution via de nombreuses tables intermédiaires. (Décrit ainsi, le modèle relationnel semble un peu démodé, n'est-ce pas ?)

Malheureusement, les logiciels d'analyse et de reporting du monde ne peuvent pas donner de sens aux données post-relationnelles. S'il n'est pas plat, s'il n'est pas uniforme, vous ne pouvez rien en faire dans les anciennes solutions d'analyse et de création de rapports !

C'est un vrai problème, car les développeurs créent des applications MongoDB qui génèrent des tonnes de données. À terme, les entreprises veulent découper et découper ces données, créer des rapports et recueillir des informations.

Vous pouvez faire tout cela aujourd'hui, mais vous devez écrire des tonnes de code, transformer et répliquer des données MongoDB dans une autre base de données ou un autre entrepôt de données, ou autrement subir des douleurs et des souffrances intenses et prolongées du type que j'aime éviter.

C'est exactement pourquoi j'ai fondé SlamData. SlamData est une société open source qui développe un outil d'analyse et de création de rapports de nouvelle génération pour les données NoSQL.

Nous venons de lancer la version bêta de SlamData, qui prend en charge MongoDB. Dans cet article, je vais parler de la façon dont vous pouvez utiliser cette version bêta pour interroger MongoDB en utilisant SQL ordinaire, quelles sont certaines des limitations, comment SlamData se compare à la concurrence et où va le projet.

Obtenir et installer SlamData

Vous pouvez créer SlamData à partir du code source sur Github. Mais si vous n'aimez pas jouer avec le code source, je vous recommande de télécharger les programmes d'installation de l'interface graphique sur le site Web de SlamData.

Il existe des programmes d'installation prédéfinis pour Linux, OS X et Windows, et ils sont fournis avec tout ce dont vous avez besoin (à l'exception d'une instance en cours d'exécution de MongoDB !).

Au cours du processus d'installation, l'assistant vous demandera l'URI de connexion MongoDB (qui peut inclure un nom d'utilisateur et un mot de passe), la base de données spécifique que vous souhaitez utiliser (ne vous inquiétez pas, vous pourrez en ajouter plus ultérieurement) et où dans le SlamData système de fichiers que vous souhaitez monter cette base de données (que vous pouvez laisser comme '/', le chemin racine).

Après l'installation, vous pouvez lancer SlamData par un double-clic. Notez qu'il existe en fait deux composants dans SlamData :le frontal et un serveur léger qui se connecte à MongoDB. Par défaut, les deux seront installés et les deux se lanceront lorsque vous double-cliquez sur SlamData.

Front-End SlamData

Le frontal SlamData, illustré dans la capture d'écran ci-dessus, est une interface visuelle de toute la puissance de SlamData (il existe également un REPL pour ceux qui préfèrent une interface en ligne de commande).

L'arborescence du système de fichiers vous montre toutes les bases de données montées, ainsi que les collections à l'intérieur de ces bases de données. C'est un rappel visuel de toutes les données que vous pouvez interroger, bien que dans les versions ultérieures, vous pourrez faire beaucoup plus avec le système de fichiers.

L'interface de l'éditeur vous permet de créer des blocs-notes, qui sont des collections de texte (Markdown), de requêtes (SQL) et de visualisations (graphiques). Un bloc-notes est comme un rapport, sauf que contrairement à la plupart des rapports, il peut être interactif et actualisé à partir de données en direct.

Rédiger des requêtes

Il est temps d'écrire quelques requêtes !

Dans ces exemples, je suppose que vous avez chargé l'ensemble de données de code postal dans votre base de données MongoDB, que vous pouvez télécharger à partir du site MongoDB.

Cet ensemble de données contient des informations de base sur les codes postaux, tels que leur emplacement (ville, état, zone géographique) et leur population.

Retirons les 5 premières entrées zip :

SELECT * FROM zips LIMIT 5

{ "_id" :"35004″ , "ville" :"ACMAR" , "loc" :[ -86.51557 , 33.584132] , "pop" :6055 , "état" :"AL"}

{ "_id" :"35005″ , "ville" :"ADAMSVILLE" , "loc" :[ -86.959727 , 33.588437] , "pop" :10616 , "état" :"AL"}

{ "_id" :"35006″ , "ville" :"ADGER" , "loc" :[ -87.167455 , 33.434277] , "pop" :3205 , "état" :"AL"}

{ "_id" :"35007″ , "ville" :"KEYSTONE" , "loc" :[ -86.812861 , 33.236868] , "pop" :14218 , "état" :"AL"}

{ "_id" :"35010″ , "ville" :"NOUVEAU SITE" , "loc" :[ -85.951086 , 32.941445] , "pop" :19942 , "état" :"AL"}

Quelles sont les villes qui ont les 5 codes postaux les plus peuplés ? Morceau de gâteau :

SELECT city, pop FROM zips ORDER BY pop DESC LIMIT 5

{ "_id" :"60623″ , "ville" :"CHICAGO" , "pop" :112047}

{ "_id" :"11226″ , "ville" :"BROOKLYN" , "pop" :111396}

{ "_id" :"10021″ , "ville" :"NEW YORK" , "pop" :106564}

{ "_id" :"10025″ , "ville" :"NEW YORK" , "pop" :100027}

{ "_id" :"90201″ , "ville" :"JARDINS BELL" , "pop" :99568}

Le dialecte SQL de SlamData (appelé SlamSQL) prend entièrement en charge les documents et les tableaux imbriqués, et vous y accédez en utilisant la notation Javascript ordinaire (par exemple, SELECT foo.bar.baz).

Parfois, vous voudrez aplatir un tableau afin de pouvoir creuser dans le contenu de ce tableau. Dans l'ensemble de données zips, il existe un champ de tableau loc qui contient une géolocalisation. Pour aplatir ce tableau, utilisez simplement l'opérateur étoile ('*') comme index de tableau :

SELECT loc[*] FROM zips LIMIT 1

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

Enfin, utilisons l'opérateur SQL GROUP BY pour résumer la population de tous les codes postaux pour chaque ville, puis extrayons les 5 villes les plus peuplées :

SELECT city, SUM(pop) AS pop FROM zips GROUP BY city ORDER BY pop DESC LIMIT 5

Plutôt cool, hein ?

La plupart des fonctions MongoDB sont actuellement prises en charge dans la version bêta, bien qu'elles portent leurs noms SQL standard (ou leurs noms PostgreSQL, selon le cas). Il s'agit notamment des éléments suivants :

  • CONCAT, INFÉRIEUR, MAJUSCUL, SOUS-CHAÎNE
  • DATE_PART
  • COMPTER, SOMME, MIN, MAX, MOYENNE
  • +, -, *, /, %
  • ARRAY_LENGTH

Limites de la version bêta

La version bêta est appelée "bêta" pour une raison :elle n'implémente pas tout SlamSQL et peut avoir quelques bogues dans les parties de SlamSQL qu'elle implémente.

En particulier, vous devez faire attention aux limitations suivantes :

  • Bien que GROUP BY soit pris en charge, les clauses HAVING n'ont pas encore été implémentées.
  • Toutes les fonctions non prises en charge de manière native par le pipeline d'agrégation (par exemple, la longueur de la chaîne) ne sont pas encore prises en charge.
  • La sélection d'éléments de tableau individuels n'est pas encore prise en charge (par exemple, SELECT loc[0] FROM zips) en raison d'un problème connu dans MongoDB.
  • DISTINCT, et d'autres opérations au niveau de l'ensemble comme UNION, UNION ALL, ne sont pas encore prises en charge.
  • Les JOIN ne sont pas encore pris en charge dans la version officielle (bien que nous ayons une branche sur Github qui les prend en charge, pour ceux qui aiment être sur le saignement bord !).
  • Il existe différents cas extrêmes qui ne sont pas encore implémentés.

Comment SlamData se compare

Actuellement, il n'y a pas beaucoup d'outils sur le marché pour effectuer des analyses sur MongoDB.

Dans le monde open source :

  • Il y a les pilotes MongoDB (disponibles en Python, Java, etc.), mais ces bibliothèques sont conçues pour les développeurs, pas pour les analystes ou les data scientists, et vous besoin d'écrire du code pour les utiliser.
  • PostgreSQL dispose d'un wrapper de données étrangères open source pour MongoDB fourni par CitrusData. À l'heure actuelle, il ne peut insérer que des filtres simples dans MongoDB. Toutes les autres opérations nécessitent de rediffuser les données de MongoDB vers PostgreSQL.
  • MoSQL est un outil open source qui simplifie l'ETL de MongoDB vers PostgreSQL. Vous devez définir de manière rigide des schémas, aplatir vos données et éviter les tableaux, ainsi que maintenir une infrastructure distincte pour l'analyse et la création de rapports.

Dans le secteur commercial :

  • Le studio de données d'AquaFold dispose d'un client MongoDB. On ne sait pas exactement ce qu'il pousse vers le pilote, bien qu'il semble y avoir des expressions, des filtres et peut-être des regroupements. Pour certaines opérations, cependant, les données doivent être renvoyées au client, ce qui rend cela peu pratique pour de nombreuses applications.
  • JSONStudio dispose d'une interface qui vous permet de créer "visuellement" des requêtes de pipeline pour le cadre d'agrégation MongoDB, mais il est soumis aux mêmes limitations que l'agrégation framework, et ne bénéficie pas de la standardisation et de la déclarativité de SQL.
  • Simba Technologies dispose d'un pilote ODBC MongoDB. Il peut pousser certains filtres et agrégations vers MongoDB, mais tout le reste doit être renvoyé au pilote pour un traitement ultérieur.
  • Progress Software propose une famille de produits de connectivité de données appelée DataDirect, avec un connecteur MongoDB. On ne sait pas exactement dans quelle mesure ces pilotes poussent vers MongoDB, mais ils sont probablement très similaires au pilote de Simba, et ils nécessitent que vous construisiez des schémas.
  • UnityJDBC dispose d'un pilote JDBC pour MongoDB, mais il s'appuie sur le streaming pour effectuer la majeure partie du travail (à l'exception du filtrage brut et très simple).

SlamData se compare très bien aux offres open source et commerciales :

  1. SlamData est 100 % open source, sans rien à acheter ni à licencier.
  2. SlamData transfère 100 % de chaque requête vers MongoDB, sans rien renvoyer au client. Jamais.
  3. SlamData ne nécessite aucune définition de schéma, aucun mappage de schéma et aucun ETL d'aucune sorte. Cela fonctionne simplement avec les données telles qu'elles existent déjà dans MongoDB.
  4. SlamData donne aux documents imbriqués et aux tableaux un statut de première classe. Il est facile d'explorer n'importe quelle structure à l'aide d'une extension propre, simple et évidente de SQL (par exemple, foo.bar.baz[2].fuz).
  5. SlamData a une interface élégante mais légère qui vous permet de créer des rapports interactifs, complets avec des graphiques. Il est facile de confier l'interface à "cette personne" de votre équipe ou de votre organisation, ce qui vous permet de faire ce pour quoi vous êtes payé au lieu d'écrire du code pour générer des rapports.

Feuille de route

Début octobre, nous prévoyons de publier la version de production de SlamData.

Dans cette version, nous aurons résolu de nombreuses limitations de la version bêta, amélioré la façon dont nous pouvons compiler SQL vers MongoDB et rendu le frontal beaucoup plus facile à utiliser et plus puissant.

En tant que projet open source, notre succès se résume à l'adoption. Si vous souhaitez voir SlamData continuer à évoluer pour devenir le meilleur outil open source d'analyse et de création de rapports NoSQL, téléchargez SlamData, bifurquez ou marquez les référentiels et commentez les bogues que vous trouvez ou les fonctionnalités que vous aimeriez voir ajoutées.