これらのデータ構造を、多数の中間テーブルを介して実行時に再アセンブルする必要がある、厳密で事前定義されたフラットテーブルにマッピングする必要はありません。 (そのように説明すると、リレーショナルモデルは古風に聞こえますね?)
残念ながら、世界の分析およびレポート作成ソフトウェアは、ポストリレーショナルデータを理解できません。平坦でない場合、すべてが均一でない場合、従来の分析およびレポートソリューション内では何もできません!
開発者は大量のデータを生成するMongoDBアプリを作成するため、これは実際の問題です。最終的に、企業はこのデータを細かく分析し、レポートを作成し、洞察を収集したいと考えています。
今日はそれをすべて行うことができますが、コードの塊を記述したり、MongoDBデータを別のデータベースやデータウェアハウスに変換して複製したりする必要があります。そうしないと、私が避けたいタイプの激しい、長期にわたる苦痛を経験する必要があります。
それがまさに私がSlamDataを設立した理由です。 SlamDataは、NoSQLデータ用の次世代の分析およびレポートツールを開発しているオープンソース企業です。
MongoDBをサポートするSlamDataのベータ版をリリースしました。この投稿では、このベータ版を使用して通常のSQLを使用してMongoDBにクエリを実行する方法、いくつかの制限事項、SlamDataと競合他社との比較、およびプロジェクトの進行状況について説明します。
SlamDataの取得とインストール
GithubのソースコードからSlamDataをビルドできます。ただし、ソースコードをいじくり回したくない場合は、SlamDataWebサイトからGUIインストーラーをダウンロードすることをお勧めします。
Linux、OS X、およびWindows用のビルド済みインストーラーがあり、必要なものがすべてバンドルされています(MongoDBの実行中のインスタンスを除く)。
インストールプロセス中に、ウィザードはMongoDB接続URI(ユーザー名とパスワードを含めることができます)、使用する特定のデータベース(心配しないで、後で追加できます)、およびSlamDataのどこにあるかを尋ねます。そのデータベースをマウントするファイルシステム(ルートパスである「/」のままにしておくことができます)。
インストール後、ダブルクリックでSlamDataを起動できます。 SlamDataには、実際には2つのコンポーネントがあります。フロントエンドと、MongoDBに接続する軽量サーバーです。デフォルトでは両方がインストールされ、SlamDataをダブルクリックすると両方が起動します。
SlamDataフロントエンド
上のスクリーンショットに示されているSlamDataフロントエンドは、SlamDataのすべての機能への視覚的なインターフェイスです(コマンドラインインターフェイスを好む人のために、REPLもあります)。
ファイルシステムツリーには、マウントされているすべてのデータベースと、これらのデータベース内のコレクションが表示されます。これは、クエリできるすべてのデータを視覚的に思い出させるものですが、後のバージョンでは、ファイルシステムでさらに多くのことができるようになります。
エディターインターフェイスを使用すると、テキスト(Markdown)、クエリ(SQL)、および視覚化(グラフ)のコレクションであるノートブックを作成できます。ノートブックはレポートに似ていますが、ほとんどのレポートとは異なり、インタラクティブでライブデータから更新できます。
クエリの作成
いくつかのクエリを書く時が来ました!
これらの例では、MongoDBサイトからダウンロードできるMongoDBデータベースに郵便番号データセットがロードされていることを前提としています。
このデータセットには、郵便番号の場所(都市、州、地域)や人口などの郵便番号に関する基本情報が含まれています。
最初の5つの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”}
郵便番号が最も多い上位5つの都市はどこですか?ケーキ:
都市を選択し、zipからpop ORDER BY 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}
SlamDataのSQL方言(SlamSQLと呼ばれる)は、ネストされたドキュメントと配列を完全にサポートしており、通常のJavascript表記(SELECT foo.bar.bazなど)を使用してそれらにアクセスします。
場合によっては、配列をフラット化して、その配列の内容を掘り下げたいことがあります。 zipデータセットには、ジオロケーションを含むloc配列フィールドがあります。この配列をフラット化するには、配列インデックスとしてスター演算子(‘*’)を使用します。
SELECT loc [*] FROM zips LIMIT 1
{“ _id”:{“ $ oid”:“ 53ecf39574d2394acbd4b6f1”}、“ loc”:-86.51557}
最後に、SQLのGROUP BY演算子を使用して、各都市のすべての郵便番号の人口を合計し、最も人口の多い上位5都市を抽出してみましょう。
SELECT city、SUM(pop)AS pop FROM zips GROUP BY city ORDER BY pop DESC LIMIT 5
かなりかっこいいですね
ほとんどのMongoDB関数は現在ベータ版でサポートされていますが、標準のSQL名(または場合によってはPostgreSQL名)でサポートされています。これらには次のものが含まれます:
- CONCAT、LOWER、UPPER、SUBSTRING
- DATE_PART
- COUNT、SUM、MIN、MAX、AVG
- +、-、*、/、%
- ARRAY_LENGTH
ベータ版の制限
ベータ版は、SlamSQLのすべてを実装しているわけではなく、実装しているSlamSQLの一部にいくつかのバグがある可能性があるという理由で「ベータ版」と呼ばれています。
特に、次の制限に注意する必要があります。
- GROUP BYはサポートされていますが、HAVING句はまだ実装されていません。
- アグリゲーションパイプラインでネイティブにサポートされていないすべての関数(文字列の長さなど)はまだサポートされていません。
- MongoDBの既知の問題により、個々の配列要素の選択はまだサポートされていません(SELECT loc [0] FROM zipsなど)。
- DISTINCT、およびUNION、UNIONALLなどの他のセットレベルの操作はまだサポートされていません。
- JOINは、正式にリリースされたバージョンではまだサポートされていません(ただし、Githubには、JOINをサポートするブランチがあります。エッジ!)。
- まだ実装されていないさまざまなエッジケースがあります。
SlamDataの積み重ね方
現在、MongoDBで分析を行うためのツールは市場にあまりありません。
オープンソースの世界:
- MongoDBドライバー(Python、Javaなどで利用可能)がありますが、これらのライブラリは、アナリストやデータサイエンティストではなく、開発者向けに設計されています。それらを使用するにはコードを書く必要があります。
- PostgreSQLには、CitrusDataによって提供されたMongoDB用のオープンソースの外部データラッパーがあります。現在、MongoDBにプッシュできるのは単純なフィルターのみです。他のすべての操作では、MongoDBからPostgreSQLにデータをストリーミングして戻す必要があります。
- MoSQLは、MongoDBからPostgreSQLへのETLを簡素化するオープンソースツールです。スキーマを厳密に定義し、データをフラット化し、配列を回避し、分析とレポート用に個別のインフラストラクチャを維持する必要があります。
商業部門:
- AquaFoldのデータスタジオにはMongoDBクライアントがあります。いくつかの表現、フィルター、そしておそらくグループ化のように見えますが、それがドライバーに何をプッシュダウンするかは正確には明確ではありません。ただし、一部の操作では、データをクライアントにストリーミングして戻す必要があるため、多くのアプリケーションでは実用的ではありません。
- JSONStudioには、MongoDBアグリゲーションフレームワークのパイプラインクエリを「視覚的に」構築できるインターフェースがありますが、アグリゲーションと同じ制限があります。フレームワークであり、SQLの標準化と宣言性の恩恵を受けていません。
- SimbaTechnologiesにはMongoDBODBCドライバーがあります。一部のフィルターと集計をMongoDBにプッシュダウンできますが、それ以外はすべてドライバーにストリーミングしてさらに処理する必要があります。
- Progress Softwareには、MongoDBコネクタを備えたDataDirectと呼ばれるデータ接続製品のファミリがあります。これらのドライバーがMongoDBにどれだけプッシュダウンするかは明らかではありませんが、おそらくSimbaのドライバーと非常によく似ており、スキーマを構築する必要があります。
- UnityJDBCにはMongoDB用のJDBCドライバーがありますが、ほとんどの作業をストリーミングに依存しています(生の非常に単純なフィルタリングを除く)。
SlamDataは、オープンソースと商用の両方の製品に対して非常によく機能します:
- SlamDataは100%オープンソースであり、購入やライセンス供与はありません。
- SlamDataは、クライアントに何もストリーミングせずに、すべてのクエリを100%MongoDBにプッシュします。これまで。
- SlamDataには、スキーマ定義、スキーママッピング、およびいかなる種類のETLも必要ありません。 MongoDBにすでに存在するデータでのみ機能します。
- SlamDataは、ネストされたドキュメントと配列にファーストクラスのステータスを提供します。 SQLのクリーンでシンプルで明白な拡張機能(例:foo.bar.baz [2] .fuz)を使用すると、任意の構造を簡単に掘り下げることができます。
- SlamDataには、グラフを備えたインタラクティブなレポートを作成できる、洗練された軽量のフロントエンドがあります。チームや組織の「その人」にフロントエンドを渡すのは簡単で、レポートを生成するためのコードを書く代わりに、報酬を支払って行うことができます。
ロードマップ
10月初旬に、SlamDataの製品版をリリースする予定です。
このリリースでは、ベータ版の多くの制限に対処し、SQLをMongoDBにコンパイルする方法を改善し、フロントエンドをはるかに使いやすく、より強力にしました。
オープンソースプロジェクトとして、私たちの成功は採用に帰着します。 SlamDataがNoSQL分析とレポート作成に最適なオープンソースツールに進化し続けることを確認したい場合は、SlamDataをダウンロードし、リポジトリをフォークまたはスターして、見つけたバグや追加したい機能についてコメントしてください。