MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB Analytics Series:SlamData – Esegui SQL e crea report direttamente su MongoDB

Questo è un guest post di John A. De Goes. John è il CTO e co-fondatore di SlamData. Quando non lavori su problemi di compilazione complicati per SlamData, puoi trovare John che parla a conferenze, blog, trascorre del tempo con la sua famiglia ed è attivo ai piedi delle Montagne Rocciose. Contatta John all'indirizzo [email protected]

L'hosting MongoDB ha avuto un enorme successo nella comunità degli sviluppatori, in parte perché consente agli sviluppatori di archiviare strutture di dati direttamente in un database veloce, scalabile e moderno .

Non è necessario mappare tali strutture di dati su tabelle rigide, predefinite e piatte che devono essere riassemblate in fase di esecuzione attraverso molte tabelle intermedie. (Descritto in questo modo, il modello relazionale suona un po' antiquato, vero?)

Sfortunatamente, i software di analisi e reporting del mondo non riescono a dare un senso ai dati post-relazionali. Se non è piatto, se non è tutto uniforme, non puoi farci nulla all'interno di soluzioni legacy di analisi e reportistica!

Questo è un vero problema, perché gli sviluppatori creano app MongoDB che generano tonnellate di dati. Alla fine, le aziende vogliono suddividere questi dati, creare report e raccogliere informazioni dettagliate.

Puoi fare tutto questo oggi, ma devi scrivere gocce di codice, trasformare e replicare i dati MongoDB in un altro database o data warehouse, o altrimenti affrontare dolore e sofferenza intensi e prolungati del tipo che preferisco evitare.

È proprio per questo che ho fondato SlamData. SlamData è una società open source che sviluppa uno strumento di analisi e reporting di nuova generazione per i dati NoSQL.

Abbiamo appena lanciato la versione beta di SlamData, che supporta MongoDB. In questo post parlerò di come puoi usare questa versione beta per interrogare MongoDB usando il normale SQL, quali sono alcune delle limitazioni, come si confronta SlamData con la concorrenza e dove sta andando il progetto.

Come ottenere e installare SlamData

Puoi creare SlamData dal codice sorgente su Github. Ma se non ti piace giocare con il codice sorgente, ti consiglio di scaricare i programmi di installazione della GUI dal sito Web di SlamData.

Esistono programmi di installazione predefiniti per Linux, OS X e Windows e vengono forniti in bundle con tutto ciò di cui hai bisogno (tranne un'istanza in esecuzione di MongoDB!).

Durante il processo di installazione, la procedura guidata ti chiederà l'URI di connessione MongoDB (che può includere un nome utente e una password), il database specifico che desideri utilizzare (non preoccuparti, puoi aggiungerne altri in seguito) e dove si trova in SlamData file system in cui vuoi montare quel database (che puoi lasciare come '/', il percorso radice).

Dopo l'installazione, puoi avviare SlamData con un doppio clic. Tieni presente che in SlamData sono presenti due componenti:il front-end e un server leggero che si connette a MongoDB. Per impostazione predefinita verranno installati entrambi ed entrambi verranno avviati quando si fa doppio clic su SlamData.

Front-end SlamData

Il front-end di SlamData, mostrato nello screenshot qui sopra, è un'interfaccia visiva per tutta la potenza di SlamData (c'è anche un REPL, per coloro che preferiscono un'interfaccia a riga di comando).

L'albero del file system mostra tutti i database montati, nonché le raccolte all'interno di questi database. È un promemoria visivo di tutti i dati che puoi interrogare, anche se nelle versioni successive sarai in grado di fare molto di più con il file system.

L'interfaccia dell'editor consente di creare taccuini, che sono raccolte di testo (Markdown), query (SQL) e visualizzazioni (grafici). Un taccuino è come un rapporto, ma a differenza della maggior parte dei rapporti, può essere interattivo e può essere aggiornato da dati in tempo reale.

Scrittura di query

È ora di scrivere alcune domande!

In questi esempi, presumo che tu abbia il set di dati del codice postale caricato nel tuo database MongoDB, che puoi scaricare dal sito MongoDB.

Questo set di dati contiene informazioni di base sui codici postali, ad esempio dove si trovano (città, stato, geografico) e la loro popolazione.

Ritiriamo le prime 5 voci zip:

SELEZIONA * DA zip LIMITE 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” :“NUOVO SITO” , “loc” :[ -85.951086 , 32.941445] , “pop” :19942 , “state” :“AL”}

Quali sono le città che hanno i primi 5 codici postali più popolosi? Pezzo di torta:

SELEZIONA città, pop DA zip ORDINA PER pop DESC LIMITE 5

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

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

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

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

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

Il dialetto SQL di SlamData (chiamato SlamSQL) ha il pieno supporto per i documenti e gli array nidificati e puoi accedervi utilizzando la normale notazione Javascript (ad es. SELECT foo.bar.baz).

A volte, vorrai appiattire un array in modo da poter scavare nel contenuto di quell'array. Nel set di dati zip è presente un campo array di loc che contiene una geolocalizzazione. Per appiattire questo array, usa semplicemente l'operatore stella ('*') come indice dell'array:

SELEZIONA loc[*] DA zip LIMITE 1

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

Infine, utilizziamo l'operatore GROUP BY di SQL per sommare la popolazione di tutti i codici postali per ciascuna città, quindi estraiamo le prime 5 città più popolose:

SELEZIONA città, SOMMA(pop) AS pop DA zips GRUPPO PER città ORDINA PER pop DESC LIMITE 5

Abbastanza bello, eh?

La maggior parte delle funzioni di MongoDB sono attualmente supportate nella versione beta, sebbene utilizzino i loro nomi SQL standard (oi nomi PostgreSQL, a seconda dei casi). Questi includono quanto segue:

  • CONCAT, INFERIORE, SUPERIORE, SOTTOSTRINGA
  • PART_DATA
  • COUNT, SUM, MIN, MAX, AVG
  • +, -, *, /, %
  • ARRAY_LENGTH

Limitazioni beta

La beta si chiama "beta" per un motivo:non implementa tutto SlamSQL e potrebbe avere alcuni bug nelle parti di SlamSQL che implementa.

In particolare, dovresti prestare attenzione alle seguenti limitazioni:

  • Sebbene GROUP BY sia supportato, le clausole HAVING non sono ancora state implementate.
  • Tutte le funzioni non supportate nativamente dalla pipeline di aggregazione (es. lunghezza della stringa) non sono ancora supportate.
  • La selezione di singoli elementi dell'array non è ancora supportata (ad es. SELECT loc[0] FROM zips) a causa di un problema noto in MongoDB.
  • DISTINCT e altre operazioni a livello di set come UNION, UNION ALL, non sono ancora supportate.
  • I JOIN non sono ancora supportati nella versione rilasciata ufficialmente (sebbene abbiamo un ramo su Github che li supporta, per coloro a cui piace essere sanguinante bordo!).
  • Ci sono vari casi limite non ancora implementati.

Come si accumula SlamData

Al momento, non ci sono molti strumenti sul mercato per eseguire analisi su MongoDB.

Nel mondo open source:

  • Ci sono i driver MongoDB (disponibili in Python, Java, ecc.), ma queste librerie sono progettate per sviluppatori, non analisti o data scientist, e tu bisogno di scrivere codice per usarli.
  • PostgreSQL ha un wrapper di dati esterni open source per MongoDB fornito da CitrusData. Al momento, può solo inserire filtri semplici in MongoDB. Tutte le altre operazioni richiedono lo streaming dei dati da MongoDB a PostgreSQL.
  • MoSQL è uno strumento open source che semplifica l'ETL da MongoDB a PostgreSQL. È necessario definire rigidamente gli schemi, appiattire i dati ed evitare gli array, nonché mantenere un'infrastruttura separata per analisi e reportistica.

Nel settore commerciale:

  • Data Studio di AquaFold ha un client MongoDB. Non è chiaro esattamente cosa spinge verso il basso al driver, anche se sembra essere alcune espressioni, filtri e forse raggruppamenti. Per alcune operazioni, tuttavia, i dati devono essere ritrasmessi al client, rendendolo poco pratico per molte applicazioni.
  • JSONStudio ha un'interfaccia che ti consente di creare "visivamente" query pipeline per il framework di aggregazione MongoDB, ma è soggetto alle stesse limitazioni dell'aggregazione framework e non beneficia della standardizzazione e della dichiaratività di SQL.
  • Simba Technologies ha un driver ODBC MongoDB. Può trasferire alcuni filtri e aggregazioni a MongoDB, ma tutto il resto deve essere ritrasmesso in streaming al driver per un'ulteriore elaborazione.
  • Progress Software ha una famiglia di prodotti per la connettività dati denominata DataDirect, con un connettore MongoDB. Non è chiaro quanto questi driver spingano verso MongoDB, ma probabilmente sono molto simili al driver di Simba e richiedono la creazione di schemi.
  • UnityJDBC ha un driver JDBC per MongoDB, ma si basa sullo streaming per svolgere la maggior parte del lavoro (tranne che per il filtraggio grezzo e molto semplice).

SlamData regge molto bene sia l'offerta open source che quella commerciale:

  1. SlamData è open source al 100%, senza nulla da acquistare o concedere in licenza.
  2. SlamData esegue il push del 100% di ogni query in MongoDB, senza trasmettere nulla al client. Mai.
  3. SlamData non richiede la definizione dello schema, la mappatura dello schema e nessun ETL di alcun tipo. Funziona solo con i dati poiché esistono già in MongoDB.
  4. SlamData fornisce ai documenti nidificati e agli array uno stato di prima classe. È facile scavare in qualsiasi struttura utilizzando un'estensione di SQL pulita, semplice ed ovvia (ad es. foo.bar.baz[2].fuz).
  5. SlamData ha un front-end elegante ma leggero che ti consente di creare report interattivi, completi di grafici. È facile passare il front-end a "quella persona" nel tuo team o organizzazione, lasciandoti libero di fare ciò per cui sei pagato invece di scrivere codice per generare rapporti.

Tabella di marcia

All'inizio di ottobre, prevediamo di rilasciare la versione di produzione di SlamData.

In questa versione, avremo affrontato molte delle limitazioni della beta, migliorato il modo in cui possiamo compilare SQL in MongoDB e reso il front-end molto più semplice da usare e più potente.

Come progetto open source, il nostro successo si riduce all'adozione. Se vuoi vedere SlamData continuare a evolversi nel miglior strumento open source per l'analisi e la reportistica NoSQL, scarica SlamData, crea un fork o aggiungi a Speciali i repository e commenta su eventuali bug che trovi o funzionalità che vorresti vedere aggiunte.