sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Analytics-serien:SlamData – Kör SQL och bygg rapporter direkt på MongoDB

Detta är ett gästinlägg av John A. De Goes. John är CTO och medgrundare av SlamData. När du inte arbetar med knepiga sammanställningsfrågor för SlamData kan du hitta John som talar på konferenser, bloggar, umgås med sin familj och är aktiv vid foten av Klippiga bergen. Kontakta John på [email protected]

MongoDB-hosting har varit enormt framgångsrik i utvecklargemenskapen, delvis för att det tillåter utvecklare att lagra datastrukturer direkt i en snabb, skalbar, modern databas .

Det finns inget behov av att mappa dessa datastrukturer till stela, fördefinierade och platta tabeller som måste sättas ihop under körning genom massor av mellanliggande tabeller. (Beskrivet på det sättet låter relationsmodellen lite gammaldags, eller hur?)

Tyvärr kan inte världens analys- och rapporteringsprogram förstå post-relationell data. Om det inte är platt, om det inte är enhetligt, kan du inte göra något med det i äldre analys- och rapporteringslösningar!

Det är ett verkligt problem, eftersom utvecklare skapar MongoDB-appar som genererar massor av data. Så småningom vill företag dela upp denna data, bygga rapporter och samla in insikter.

Du kan göra allt det idag, men du behöver skriva massa kod, omvandla och replikera MongoDB-data till en annan databas eller datalager, eller på annat sätt gå igenom intensiv, långvarig smärta och lidande av den typ som jag vill undvika.

Det är precis därför jag grundade SlamData. SlamData är ett företag med öppen källkod som utvecklar nästa generations analys- och rapporteringsverktyg för NoSQL-data.

Vi har precis lanserat betaversionen av SlamData, som stöder MongoDB. I det här inlägget kommer jag att prata om hur du kan använda denna beta för att fråga MongoDB med vanlig SQL, vilka några av begränsningarna är, hur SlamData står sig i jämförelse med konkurrenterna och vart projektet är på väg.

Hämta och installera SlamData

Du kan bygga SlamData från källkod på Github. Men om du inte gillar att smutskasta med källkod rekommenderar jag att du laddar ner GUI-installationsprogram från SlamDatas webbplats.

Det finns förbyggda installationsprogram för Linux, OS X och Windows, och de levereras med allt du behöver (förutom en körande instans av MongoDB!).

Under installationsprocessen kommer guiden att fråga dig om MongoDB Connection URI (som kan innehålla ett användarnamn och lösenord), den specifika databasen du vill använda (oroa dig inte, du kan lägga till mer senare) och var i SlamData filsystem som du vill montera den databasen (som du kan lämna som '/', rotsökvägen).

Efter installationen kan du starta SlamData med ett dubbelklick. Observera att det faktiskt finns två komponenter till SlamData:front-end och en lättviktsserver som ansluter till MongoDB. Som standard kommer båda att installeras och båda startas när du dubbelklickar på SlamData.

SlamData Front-End

SlamData-gränssnittet, som visas i skärmdumpen ovan, är ett visuellt gränssnitt för all kraft i SlamData (det finns en REPL också, för dem som föredrar ett kommandoradsgränssnitt).

Filsystemträdet visar alla monterade databaser, såväl som samlingarna i dessa databaser. Det är en visuell påminnelse om all data du kan fråga, även om du i senare versioner kommer att kunna göra mycket mer med filsystemet.

Redaktörsgränssnittet låter dig skapa anteckningsböcker, som är samlingar av text (Markdown), frågor (SQL) och visualiseringar (diagram). En anteckningsbok är som en rapport, förutom till skillnad från de flesta rapporter kan den vara interaktiv och kan uppdateras från livedata.

Skriva frågor

Dags att skriva några frågor!

I dessa exempel kommer jag att anta att du har postnummerdatauppsättningen inläst i din MongoDB-databas, som du kan ladda ner från MongoDB-webbplatsen.

Denna datamängd har grundläggande information om postnummer, till exempel var de finns (stad, delstat, geo) och deras befolkning.

Låt oss dra tillbaka de första 5 zip-posterna:

VÄLJ * FRÅN zips 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”}

Vilka är de städer som har de 5 mest folkrika postnumren? Tårtbit:

VÄLJ stad, pop FRÅN dragkedjor BESTÄLL EFTER pop DESC LIMIT 5

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

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

{ “_id” :“10021″ , “city” :“NEW YORK”, “pop” :106564}

{ “_id” :“10025″ , “city” :“NEW YORK” , “pop” :100027}

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

SlamDatas dialekt av SQL (kallad SlamSQL) har fullt stöd för kapslade dokument och arrayer, och du kommer åt dem med vanlig Javascript-notation (t.ex. SELECT foo.bar.baz).

Ibland vill du platta ut en array så att du kan gräva i innehållet i den arrayen. I zips-datauppsättningen finns det ett lokaliseringsfält som innehåller en geolokalisering. För att platta till den här arrayen, använd bara stjärnoperatorn ('*') som arrayindex:

VÄLJ loc[*] FRÅN zips LIMIT 1

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

Slutligen, låt oss använda SQLs GROUP BY-operator för att summera populationen av alla postnummer för varje stad och sedan extrahera de 5 mest folkrika städerna:

VÄLJ stad, SUM(pop) SOM pop FRÅN zips GRUPP EFTER stad BESTÄLL EFTER pop DESC LIMIT 5

Ganska coolt, va?

De flesta MongoDB-funktioner stöds för närvarande i betaversionen, även om de går efter sina vanliga SQL-namn (eller efter sina PostgreSQL-namn, beroende på vad som är fallet). Dessa inkluderar följande:

  • CONCAT, LOWER, UPPER, SUBSTRING
  • DATE_PART
  • ANTAL, SUMMA, MIN, MAX, AVG
  • +, -, *, /, %
  • ARRAY_LENGTH

Betabegränsningar

Betan kallas "beta" av en anledning:den implementerar inte hela SlamSQL och kan ha några buggar i de delar av SlamSQL som den implementerar.

I synnerhet bör du vara uppmärksam på följande begränsningar:

  • Även om GROUP BY stöds har HAVING klausuler ännu inte implementerats.
  • Alla funktioner som inte stöds av Aggregation Pipeline (t.ex. stränglängd) stöds inte ännu.
  • Val av enskilda arrayelement stöds inte ännu (t.ex. SELECT loc[0] FROM zips) på grund av ett känt problem i MongoDB.
  • DISTINCT och andra uppsättningsnivåoperationer som UNION, UNION ALL stöds inte ännu.
  • JOINs stöds ännu inte i den officiellt släppta versionen (även om vi har en filial på Github som stöder dem, för dem som gillar att vara på blödningen kant!).
  • Det finns olika kantfall som ännu inte implementerats.

Hur SlamData stackar upp

För närvarande finns det inte många verktyg på marknaden för att göra analyser på MongoDB.

I världen med öppen källkod:

  • Det finns MongoDB-drivrutiner (tillgängliga i Python, Java, etc.), men dessa bibliotek är designade för utvecklare, inte analytiker eller datavetare, och du måste skriva kod för att använda dem.
  • PostgreSQL har ett utländskt dataomslag med öppen källkod för MongoDB från CitrusData. Just nu kan den bara skjuta in enkla filter i MongoDB. Alla andra operationer kräver att data streamas tillbaka från MongoDB till PostgreSQL.
  • MoSQL är ett verktyg med öppen källkod som förenklar ETL från MongoDB till PostgreSQL. Du måste strikt definiera scheman, platta till dina data och undvika arrayer, samt underhålla separat infrastruktur för analys och rapportering.

I den kommersiella sektorn:

  • AquaFolds Data Studio har en MongoDB-klient. Det är inte klart exakt vad det trycker ner till föraren, även om det verkar vara några uttryck, filter och kanske gruppering. För vissa operationer måste dock data strömmas tillbaka till klienten, vilket gör det opraktiskt för många applikationer.
  • JSONStudio har ett gränssnitt som låter dig "visuellt" bygga pipeline-frågor för MongoDB-aggregationsramverket, men det är föremål för samma begränsningar som aggregeringen ramverk och drar inte nytta av standardiseringen och deklarativiteten hos SQL.
  • Simba Technologies har en MongoDB ODBC-drivrutin. Det kan trycka ner vissa filter och aggregationer till MongoDB, men allt annat måste streamas tillbaka till drivrutinen för vidare bearbetning.
  • Progress Software har en familj av dataanslutningsprodukter som kallas DataDirect, med en MongoDB-anslutning. Det är inte klart hur mycket dessa drivrutiner trycker ner till MongoDB, men de är förmodligen väldigt lika drivrutinen från Simba, och de kräver att du bygger scheman.
  • UnityJDBC har en JDBC-drivrutin för MongoDB, men den förlitar sig på streaming för att göra det mesta av arbetet (förutom rå och mycket enkel filtrering).

SlamData står sig mycket väl mot både öppen källkod och kommersiella erbjudanden:

  1. SlamData är 100 % öppen källkod, utan något att köpa eller licensiera.
  2. SlamData trycker ner 100 % av varje fråga till MongoDB, utan att strömma något tillbaka till klienten. Någonsin.
  3. SlamData kräver ingen schemadefinition, ingen schemamappning och ingen ETL av något slag. Det fungerar bara med data eftersom det redan finns i MongoDB.
  4. SlamData ger kapslade dokument och arrayer förstklassig status. Det är lätt att gräva i vilken struktur som helst med en ren, enkel och uppenbar tillägg av SQL (t.ex. foo.bar.baz[2].fuz).
  5. SlamData har ett snyggt men lätt gränssnitt som låter dig bygga interaktiva rapporter, kompletta med diagram. Det är lätt att lämna över gränssnittet till "den personen" i ditt team eller organisation, vilket gör att du kan göra vad du får betalt för att göra istället för att skriva kod för att generera rapporter.

Färdkarta

I början av oktober planerar vi att släppa produktionsversionen av SlamData.

I den här utgåvan har vi tagit itu med många av betans begränsningar, förbättrat sättet vi kan kompilera SQL till MongoDB och gjort gränssnittet mycket enklare att använda och kraftfullare.

Som ett projekt med öppen källkod beror vår framgång på adoption. Om du vill se SlamData fortsätta att utvecklas till det bästa verktyget med öppen källkod för NoSQL-analys och -rapportering, ladda ner SlamData, dela eller stjärnmärka förråden och kommentera om alla buggar du hittar eller funktioner som du vill se tillagda.


  1. Hur man ansluter till Redis-instans (memorystore) från Googles standardappmotor (Python 3.7)

  2. Exkludera specifika fält i jokerteckenindex i MongoDB

  3. Ring lagrad funktion i mongodb

  4. Formatera ett tal som valuta i SQL