MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB Analytics Series:SlamData – Führen Sie SQL aus und erstellen Sie Berichte direkt in MongoDB

Dies ist ein Gastbeitrag von John A. De Goes . John ist der CTO und Mitbegründer von SlamData. Wenn er nicht an kniffligen Kompilierungsproblemen für SlamData arbeitet, findet man John auf Konferenzen, beim Bloggen, beim Verbringen von Zeit mit seiner Familie und beim Aktivsein in den Ausläufern der Rocky Mountains. Wenden Sie sich unter [email protected] an John.

MongoDB-Hosting war in der Entwicklergemeinschaft äußerst erfolgreich, teilweise weil es Entwicklern ermöglicht, Datenstrukturen direkt in einer schnellen, skalierbaren, modernen Datenbank zu speichern .

Es ist nicht erforderlich, diese Datenstrukturen starren, vordefinierten und flachen Tabellen zuzuordnen, die zur Laufzeit durch viele Zwischentabellen neu zusammengesetzt werden müssen. (So ​​beschrieben klingt das relationale Modell irgendwie altmodisch, oder?)

Leider kann die weltweite Analyse- und Berichtssoftware postrelationale Daten nicht verstehen. Wenn es nicht flach ist, wenn es nicht ganz einheitlich ist, können Sie nichts damit in älteren Analyse- und Berichtslösungen anfangen!

Das ist ein echtes Problem, weil Entwickler MongoDB-Apps erstellen, die Unmengen an Daten generieren. Letztendlich möchten Unternehmen diese Daten aufteilen, Berichte erstellen und Einblicke gewinnen.

Sie können all das heute tun, aber Sie müssen Unmengen von Code schreiben, MongoDB-Daten transformieren und in eine andere Datenbank oder ein Data Warehouse replizieren oder anderweitig intensive, anhaltende Schmerzen und Leiden der Art durchmachen, die ich gerne vermeide.

Genau dafür habe ich SlamData gegründet. SlamData ist ein Open-Source-Unternehmen, das ein Analyse- und Berichtstool der nächsten Generation für NoSQL-Daten entwickelt.

Wir haben gerade die Betaversion von SlamData veröffentlicht, die MongoDB unterstützt. In diesem Beitrag werde ich darüber sprechen, wie Sie diese Beta verwenden können, um MongoDB mit gewöhnlichem SQL abzufragen, welche Einschränkungen es gibt, wie SlamData im Vergleich zur Konkurrenz abschneidet und wohin das Projekt geht.

SlamData abrufen und installieren

Sie können SlamData aus dem Quellcode auf Github erstellen. Aber wenn Sie nicht gerne mit dem Quellcode herumspielen, empfehle ich, die GUI-Installer von der SlamData-Website herunterzuladen.

Es gibt vorgefertigte Installationsprogramme für Linux, OS X und Windows, und sie werden mit allem geliefert, was Sie brauchen (außer einer laufenden Instanz von MongoDB!).

Während des Installationsvorgangs fragt Sie der Assistent nach dem MongoDB-Verbindungs-URI (der einen Benutzernamen und ein Passwort enthalten kann), der spezifischen Datenbank, die Sie verwenden möchten (keine Sorge, Sie können später weitere hinzufügen) und wo in den SlamData Dateisystem, in dem Sie diese Datenbank mounten möchten (das Sie als '/', den Root-Pfad, belassen können).

Nach der Installation können Sie SlamData mit einem Doppelklick starten. Beachten Sie, dass SlamData eigentlich aus zwei Komponenten besteht:dem Front-End und einem schlanken Server, der eine Verbindung zu MongoDB herstellt. Standardmäßig werden beide installiert und beide werden gestartet, wenn Sie auf SlamData doppelklicken.

SlamData-Frontend

Das im obigen Screenshot gezeigte SlamData-Frontend ist eine visuelle Schnittstelle für die gesamte Leistungsfähigkeit von SlamData (es gibt auch eine REPL für diejenigen, die eine Befehlszeilenschnittstelle bevorzugen).

Der Dateisystembaum zeigt Ihnen alle gemounteten Datenbanken sowie die Sammlungen in diesen Datenbanken. Es ist eine visuelle Erinnerung an alle Daten, die Sie abfragen können, obwohl Sie in späteren Versionen viel mehr mit dem Dateisystem machen können.

Die Editor-Oberfläche ermöglicht es Ihnen, Notizbücher zu erstellen, die Sammlungen von Text (Markdown), Abfragen (SQL) und Visualisierungen (Diagramme) sind. Ein Notizbuch ist wie ein Bericht, außer dass es im Gegensatz zu den meisten Berichten interaktiv sein und aus Live-Daten aktualisiert werden kann.

Abfragen schreiben

Zeit, ein paar Abfragen zu schreiben!

In diesen Beispielen gehe ich davon aus, dass Sie den Postleitzahl-Datensatz in Ihre MongoDB-Datenbank geladen haben, die Sie von der MongoDB-Website herunterladen können.

Dieser Datensatz enthält grundlegende Informationen zu Postleitzahlen, z. B. wo sie sich befinden (Stadt, Bundesland, Geo) und ihre Bevölkerung.

Ziehen wir die ersten 5 Zip-Einträge zurück:

AUSWÄHLEN * AUS ZIP-LIMIT 5

{ „_id“ :„35004″ , „city“ :„ACMAR“ , „loc“ :[ -86.51557 , 33.584132] , „pop“ :6055 , „state“ :„AL“}

{ „_id“ :„35005″ , „city“ :„ADAMSVILLE“ , „loc“ :[ -86.959727 , 33.588437] , „pop“ :10616 , „state“ :„AL“}

{ „_id“ :„35006″ , „city“ :„ADGER“ , „loc“ :[ -87.167455 , 33.434277] , „pop“ :3205 , „state“ :„AL“}

{ „_id“ :„35007″ , „city“ :„KEYSTONE“ , „loc“ :[ -86.812861 , 33.236868] , „pop“ :14218 , „state“ :„AL“}

{ „_id“ :„35010″ , „city“ :„NEW SITE“ , „loc“ :[ -85.951086 , 32.941445] , „pop“ :19942 , „state“ :„AL“}

Welche Städte haben die 5 bevölkerungsreichsten Postleitzahlen? Kinderspiel:

AUSWÄHLEN Stadt, Pop AUS Reißverschlüssen ORDER BY Pop DESC LIMIT 5

{ „_id“ :„60623″ , „Stadt“ :„CHICAGO“ , „pop“ :112047}

{ „_id“ :„11226″ , „Stadt“ :„BROOKLYN“ , „pop“ :111396}

{ „_id“ :„10021″ , „Stadt“ :„NEW YORK“ , „pop“ :106564}

{ „_id“ :„10025″ , „Stadt“ :„NEW YORK“ , „pop“ :100027}

{ „_id“ :„90201″ , „Stadt“ :„GLOCKENGÄRTEN“ , „Pop“ :99568}

Der SQL-Dialekt von SlamData (genannt SlamSQL) bietet volle Unterstützung für verschachtelte Dokumente und Arrays, und Sie greifen mit der gewöhnlichen Javascript-Notation (z. B. SELECT foo.bar.baz) darauf zu.

Manchmal möchten Sie ein Array glätten, damit Sie in den Inhalt dieses Arrays eintauchen können. Im ZIP-Datensatz gibt es ein loc Array-Feld, das eine Geolokalisierung enthält. Um dieses Array zu glätten, verwenden Sie einfach den Sternoperator (‘*’) als Array-Index:

SELECT loc[*] FROM zips LIMIT 1

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

Schließlich verwenden wir den GROUP BY-Operator von SQL, um die Bevölkerung aller Postleitzahlen für jede Stadt zusammenzufassen und dann die Top 5 der bevölkerungsreichsten Städte zu extrahieren:

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

Ziemlich cool, oder?

Die meisten MongoDB-Funktionen werden derzeit in der Betaversion unterstützt, obwohl sie ihre Standard-SQL-Namen (oder je nach Fall ihre PostgreSQL-Namen) verwenden. Dazu gehören die folgenden:

  • CONCAT, LOWER, UPPER, SUBSTRING
  • DATE_PART
  • ZAHL, SUMME, MIN, MAX, DURCHSCHNITT
  • +, -, *, /, %
  • ARRAY_LENGTH

Beta-Einschränkungen

Die Beta wird aus einem bestimmten Grund „Beta“ genannt:Sie implementiert nicht das gesamte SlamSQL und kann einige Fehler in den Teilen von SlamSQL enthalten, die sie implementiert.

Beachten Sie insbesondere die folgenden Einschränkungen:

  • Obwohl GROUP BY unterstützt wird, wurden HAVING-Klauseln noch nicht implementiert.
  • Alle Funktionen, die nicht nativ von der Aggregation Pipeline unterstützt werden (z. B. Zeichenfolgenlänge), werden noch nicht unterstützt.
  • Die Auswahl einzelner Array-Elemente wird aufgrund eines bekannten Problems in MongoDB noch nicht unterstützt (z. B. SELECT loc[0] FROM zips).
  • DISTINCT und andere Operationen auf Satzebene wie UNION, UNION ALL werden noch nicht unterstützt.
  • JOINs werden in der offiziell veröffentlichten Version noch nicht unterstützt (obwohl wir einen Zweig auf Github haben, der sie unterstützt, für diejenigen, die gerne auf dem Schlauch stehen Kante!).
  • Es gibt verschiedene Grenzfälle, die noch nicht implementiert sind.

Wie SlamData stapelt

Derzeit gibt es nicht viele Tools auf dem Markt, um Analysen in MongoDB durchzuführen.

In der Open-Source-Welt:

  • Es gibt die MongoDB-Treiber (verfügbar in Python, Java usw.), aber diese Bibliotheken sind für Entwickler konzipiert, nicht für Analysten oder Datenwissenschaftler und für Sie müssen Code schreiben, um sie zu verwenden.
  • PostgreSQL hat einen Open-Source-Fremddaten-Wrapper für MongoDB, der von CitrusData beigesteuert wurde. Im Moment kann es nur einfache Filter in MongoDB pushen. Alle anderen Vorgänge erfordern das Rückströmen der Daten von MongoDB nach PostgreSQL.
  • MoSQL ist ein Open-Source-Tool, das ETL von MongoDB in PostgreSQL vereinfacht. Sie müssen Schemata streng definieren, Ihre Daten glätten und Arrays vermeiden sowie eine separate Infrastruktur für Analysen und Berichte unterhalten.

Im gewerblichen Bereich:

  • Das Data Studio von AquaFold verfügt über einen MongoDB-Client. Es ist nicht genau klar, was es an den Fahrer weitergibt, obwohl es anscheinend einige Ausdrücke, Filter und vielleicht Gruppierungen sind. Für einige Vorgänge müssen Daten jedoch zurück zum Client gestreamt werden, was dies für viele Anwendungen unpraktisch macht.
  • JSONStudio verfügt über eine Schnittstelle, mit der Sie Pipeline-Abfragen für das MongoDB-Aggregationsframework „visuell“ erstellen können, aber es unterliegt denselben Einschränkungen wie die Aggregation Framework und profitiert nicht von der Standardisierung und Deklarativität von SQL.
  • Simba Technologies hat einen MongoDB ODBC-Treiber. Es kann einige Filter und Aggregationen an MongoDB übertragen, aber alles andere muss zur weiteren Verarbeitung an den Treiber zurückgesendet werden.
  • Progress Software bietet eine Familie von Datenkonnektivitätsprodukten namens DataDirect mit einem MongoDB-Konnektor an. Es ist nicht klar, wie viel diese Treiber auf MongoDB übertragen, aber sie sind wahrscheinlich dem Treiber von Simba sehr ähnlich und erfordern, dass Sie Schemas erstellen.
  • UnityJDBC hat einen JDBC-Treiber für MongoDB, aber er verlässt sich auf Streaming, um die meiste Arbeit zu erledigen (mit Ausnahme von rohem und sehr einfachem Filtern).

SlamData schlägt sich sowohl mit Open-Source- als auch mit kommerziellen Angeboten sehr gut:

  1. SlamData ist zu 100 % Open Source, es muss nichts gekauft oder lizenziert werden.
  2. SlamData überträgt 100 % jeder Abfrage nach unten in MongoDB, ohne etwas an den Client zurückzustreamen. Immer.
  3. SlamData erfordert keine Schemadefinition, keine Schemazuordnung und keinerlei ETL. Es funktioniert einfach mit den Daten, die bereits in MongoDB vorhanden sind.
  4. SlamData verleiht verschachtelten Dokumenten und Arrays erstklassigen Status. Mit einer sauberen, einfachen und offensichtlichen Erweiterung von SQL (z. B. foo.bar.baz[2].fuz) ist es einfach, in jede Struktur einzudringen.
  5. SlamData hat ein schickes, aber leichtes Front-End, mit dem Sie interaktive Berichte erstellen können, komplett mit Diagrammen. Es ist einfach, das Front-End an „diese Person“ in Ihrem Team oder Ihrer Organisation zu übergeben, sodass Sie das tun können, wofür Sie bezahlt werden, anstatt Code schreiben zu müssen, um Berichte zu erstellen.

Fahrplan

Anfang Oktober planen wir die Veröffentlichung der Produktionsversion von SlamData.

In dieser Version haben wir viele der Einschränkungen der Beta behoben, die Art und Weise verbessert, wie wir SQL in MongoDB kompilieren können, und das Front-End viel benutzerfreundlicher und leistungsfähiger gemacht.

Als Open-Source-Projekt hängt unser Erfolg von der Akzeptanz ab. Wenn Sie möchten, dass sich SlamData weiter zum besten Open-Source-Tool für NoSQL-Analysen und -Berichte entwickelt, laden Sie SlamData herunter, verzweigen oder markieren Sie die Repositories und kommentieren Sie alle Fehler, die Sie finden, oder Funktionen, die Sie gerne hinzugefügt sehen würden.