MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Série MongoDB Analytics:SlamData – Execute SQL e crie relatórios diretamente no MongoDB

Este é um post convidado de John A. De Goes. John é o CTO e cofundador da SlamData. Quando não está trabalhando em questões complicadas de compilação para o SlamData, você pode encontrar John falando em conferências, blogando, passando tempo com sua família e sendo ativo no sopé das Montanhas Rochosas. Entre em contato com John em [email protected]

A hospedagem do MongoDB tem sido um grande sucesso na comunidade de desenvolvedores, em parte porque permite que os desenvolvedores armazenem estruturas de dados diretamente em um banco de dados rápido, escalável e moderno .

Não há necessidade de mapear essas estruturas de dados para tabelas rígidas, predefinidas e planas que precisam ser remontadas em tempo de execução por meio de muitas tabelas intermediárias. (Descrito dessa forma, o modelo relacional soa meio antiquado, não é?)

Infelizmente, os softwares de análise e relatórios do mundo não conseguem entender os dados pós-relacionais. Se não for plano, se não for uniforme, você não poderá fazer nada com ele nas soluções legadas de análise e relatórios!

Esse é um problema real, porque os desenvolvedores criam aplicativos MongoDB que geram toneladas de dados. Eventualmente, as empresas querem fatiar esses dados, criar relatórios e coletar insights.

Você pode fazer tudo isso hoje, mas precisa escrever montes de código, transformar e replicar dados do MongoDB em outro banco de dados ou data warehouse ou passar por dor e sofrimento intensos e prolongados do tipo que gosto de evitar.

É exatamente por isso que fundei a SlamData. A SlamData é uma empresa de código aberto que desenvolve uma ferramenta de análise e geração de relatórios de última geração para dados NoSQL.

Acabamos de lançar a versão beta do SlamData, compatível com o MongoDB. Neste post, falarei sobre como você pode usar esse beta para consultar o MongoDB usando SQL comum, quais são algumas das limitações, como o SlamData se compara à concorrência e para onde o projeto está indo.

Obtendo e instalando o SlamData


Você pode compilar o SlamData a partir do código-fonte no Github. Mas se você não gosta de mexer no código-fonte, recomendo baixar os instaladores da GUI do site SlamData.

Existem instaladores pré-criados para Linux, OS X e Windows, e eles vêm com tudo o que você precisa (exceto uma instância em execução do MongoDB!).

Durante o processo de instalação, o assistente solicitará o URI de conexão do MongoDB (que pode incluir um nome de usuário e senha), o banco de dados específico que você deseja usar (não se preocupe, você pode adicionar mais posteriormente) e onde no SlamData sistema de arquivos você deseja montar esse banco de dados (que você pode deixar como '/', o caminho raiz).

Após a instalação, você pode iniciar o SlamData com um clique duplo. Observe que, na verdade, existem dois componentes no SlamData:o front-end e um servidor leve que se conecta ao MongoDB. Por padrão, ambos serão instalados e ambos serão iniciados quando você clicar duas vezes em SlamData.

SlamData Front-end


O front-end do SlamData, mostrado na captura de tela acima, é uma interface visual para todo o poder do SlamData (há também um REPL, para quem prefere uma interface de linha de comando).

A árvore do sistema de arquivos mostra todos os bancos de dados montados, bem como as coleções dentro desses bancos de dados. É um lembrete visual de todos os dados que você pode consultar, embora em versões posteriores você possa fazer muito mais com o sistema de arquivos.

A interface do editor permite criar notebooks, que são coleções de texto (Markdown), consultas (SQL) e visualizações (gráficos). Um notebook é como um relatório, exceto que, diferentemente da maioria dos relatórios, ele pode ser interativo e pode ser atualizado a partir de dados ao vivo.

Escrevendo consultas


Hora de escrever algumas perguntas!

Nesses exemplos, vou supor que você tenha o conjunto de dados de código postal carregado no banco de dados do MongoDB, que pode ser baixado no site do MongoDB.

Este conjunto de dados possui informações básicas sobre CEPs, como onde estão localizados (cidade, estado, geolocalização) e sua população.

Vamos retirar as primeiras 5 entradas zip:

SELECT * FROM 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”}

Quais são as cidades que têm os 5 CEPs mais populosos? Pedaco de bolo:

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


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

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

{ “_id” :“10021″ , “cidade” :“NOVA YORK” , “pop” :106564}

{ “_id” :“10025″ , “cidade” :“NOVA YORK” , “pop” :100027}

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

O dialeto de SQL do SlamData (chamado SlamSQL) tem suporte completo para documentos e arrays aninhados, e você os acessa usando a notação Javascript comum (por exemplo, SELECT foo.bar.baz).

Às vezes, você desejará achatar um array para poder explorar o conteúdo desse array. No conjunto de dados zips, há um campo loc array que contém uma geolocalização. Para achatar este array, basta usar o operador estrela ('*') como índice do array:

SELECT loc[*] FROM zips LIMIT 1


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


Por fim, vamos usar o operador GROUP BY do SQL para somar a população de todos os CEPs de cada cidade e, em seguida, extrair as 5 cidades mais populosas:

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


Bem legal, hein?

A maioria das funções do MongoDB são atualmente suportadas na versão beta, embora sejam usadas por seus nomes SQL padrão (ou por seus nomes PostgreSQL, conforme o caso). Estes incluem o seguinte:
  • CONCAT, INFERIOR, SUPERIOR, SUBSTRING
  • DATE_PART
  • CONTAGEM, SOMA, MIN, MAX, AVG
  • +, -, *, /, %
  • ARRAY_LENGTH

Limitações Beta


O beta é chamado de “beta” por um motivo:ele não implementa todo o SlamSQL e pode ter alguns bugs nas partes do SlamSQL que ele implementa.

Em particular, você deve prestar atenção às seguintes limitações:
  • Embora GROUP BY seja compatível, as cláusulas HAVING ainda não foram implementadas.
  • Todas as funções não suportadas nativamente pelo pipeline de agregação (por exemplo, comprimento da string) ainda não são suportadas.
  • A seleção de elementos de array individuais ainda não é suportada (por exemplo, SELECT loc[0] FROM zips) devido a um problema conhecido no MongoDB.
  • DISTINCT e outras operações de nível de conjunto, como UNION, UNION ALL, ainda não são suportadas.
  • JOINs ainda não são suportados na versão lançada oficialmente (embora tenhamos uma ramificação no Github que os suporta, para aqueles que gostam de estar no sangrando borda!).
  • Existem vários casos extremos ainda não implementados.

Como o SlamData se acumula


Atualmente, não existem muitas ferramentas no mercado para fazer análises no MongoDB.

No mundo do código aberto:
  • Existem os drivers MongoDB (disponíveis em Python, Java etc.), mas essas bibliotecas são projetadas para desenvolvedores, não analistas ou cientistas de dados, e você precisa escrever código para usá-los.
  • O PostgreSQL tem um wrapper de dados externos de código aberto para MongoDB contribuído pela CitrusData. No momento, ele só pode enviar filtros simples para o MongoDB. Todas as outras operações requerem o streaming dos dados de volta do MongoDB para o PostgreSQL.
  • MoSQL é uma ferramenta de código aberto que simplifica o ETL do MongoDB para o PostgreSQL. Você precisa definir esquemas rigidamente, nivelar seus dados e evitar arrays, além de manter uma infraestrutura separada para análises e relatórios.

No setor comercial:
  • O Data Studio do AquaFold tem um cliente MongoDB. Não está claro exatamente o que ele empurra para o driver, embora pareça ser algumas expressões, filtros e talvez agrupamento. Para algumas operações, no entanto, os dados devem ser transmitidos de volta para o cliente, tornando-o impraticável para muitos aplicativos.
  • JSONStudio tem uma interface que permite criar consultas de pipeline "visualmente" para a estrutura de agregação do MongoDB, mas está sujeita às mesmas limitações da agregação framework e não se beneficia da padronização e declaratividade do SQL.
  • Simba Technologies possui um driver ODBC MongoDB. Ele pode enviar alguns filtros e agregações para o MongoDB, mas todo o resto precisa ser transmitido de volta ao driver para processamento adicional.
  • A Progress Software tem uma família de produtos de conectividade de dados chamada DataDirect, com um conector MongoDB. Não está claro o quanto esses drivers são enviados para o MongoDB, mas eles provavelmente são muito semelhantes ao driver do Simba e exigem que você crie esquemas.
  • O UnityJDBC tem um driver JDBC para MongoDB, mas depende do streaming para fazer a maior parte do trabalho (exceto para filtragem bruta e muito simples).
  • l>

O SlamData se compara muito bem com ofertas de código aberto e comerciais:
  1. SlamData é 100% de código aberto, sem nada para comprar ou licenciar.
  2. SlamData envia 100% de cada consulta para o MongoDB, sem transmitir nada de volta ao cliente. Nunca.
  3. SlamData não requer definição de esquema, mapeamento de esquema e ETL de qualquer tipo. Ele só funciona com os dados já existentes no MongoDB.
  4. SlamData fornece documentos aninhados e arrays com status de primeira classe. É fácil explorar qualquer estrutura usando uma extensão de SQL limpa, simples e óbvia (por exemplo, foo.bar.baz[2].fuz).
  5. O SlamData tem um front-end elegante, mas leve, que permite criar relatórios interativos, completos com gráficos. É fácil entregar o front-end para "essa pessoa" em sua equipe ou organização, liberando você para fazer o que é pago para fazer, em vez de escrever código para gerar relatórios.

Roteiro


No início de outubro, planejamos lançar a versão de produção do SlamData.

Nesta versão, abordaremos muitas das limitações do beta, aprimoramos a maneira como podemos compilar SQL para o MongoDB e tornamos o front-end muito mais fácil de usar e mais poderoso.

Como um projeto de código aberto, nosso sucesso se resume à adoção. Se você quiser que o SlamData continue a evoluir para a melhor ferramenta de código aberto para análises e relatórios NoSQL, faça o download do SlamData, fork ou star os repositórios e comente os bugs que encontrar ou os recursos que gostaria de ver adicionados.