sql >> データベース >  >> NoSQL >> MongoDB

MongoDB Analyticsシリーズ:SlamData –MongoDBで直接SQLを実行してレポートを作成する

    これはJohnA.DeGoesによるゲスト投稿です。 Johnは、SlamDataのCTO兼共同創設者です。 SlamDataのトリッキーなコンパイルの問題に取り組んでいないときは、ジョンが会議で話したり、ブログを書いたり、家族と時間を過ごしたり、ロッキー山脈のふもとで活動しているのを見つけることができます。 John([email protected])に連絡してください。 MongoDBホスティングは、開発者が高速でスケーラブルな最新のデータベースにデータ構造を直接保存できることもあり、開発者コミュニティで大成功を収めています。 。

    これらのデータ構造を、多数の中間テーブルを介して実行時に再アセンブルする必要がある、厳密で事前定義されたフラットテーブルにマッピングする必要はありません。 (そのように説明すると、リレーショナルモデルは古風に聞こえますね?)

    残念ながら、世界の分析およびレポート作成ソフトウェアは、ポストリレーショナルデータを理解できません。平坦でない場合、すべてが均一でない場合、従来の分析およびレポートソリューション内では何もできません!

    開発者は大量のデータを生成する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は、オープンソースと商用の両方の製品に対して非常によく機能します:

    1. SlamDataは100%オープンソースであり、購入やライセンス供与はありません。
    2. SlamDataは、クライアントに何もストリーミングせずに、すべてのクエリを100%MongoDBにプッシュします。これまで。
    3. SlamDataには、スキーマ定義、スキーママッピング、およびいかなる種類のETLも必要ありません。 MongoDBにすでに存在するデータでのみ機能します。
    4. SlamDataは、ネストされたドキュメントと配列にファーストクラスのステータスを提供します。 SQLのクリーンでシンプルで明白な拡張機能(例:foo.bar.baz [2] .fuz)を使用すると、任意の構造を簡単に掘り下げることができます。
    5. SlamDataには、グラフを備えたインタラクティブなレポートを作成できる、洗練された軽量のフロントエンドがあります。チームや組織の「その人」にフロントエンドを渡すのは簡単で、レポートを生成するためのコードを書く代わりに、報酬を支払って行うことができます。

    ロードマップ

    10月初旬に、SlamDataの製品版をリリースする予定です。

    このリリースでは、ベータ版の多くの制限に対処し、SQLをMongoDBにコンパイルする方法を改善し、フロントエンドをはるかに使いやすく、より強力にしました。

    オープンソースプロジェクトとして、私たちの成功は採用に帰着します。 SlamDataがNoSQL分析とレポート作成に最適なオープンソースツールに進化し続けることを確認したい場合は、SlamDataをダウンロードし、リポジトリをフォークまたはスターして、見つけたバグや追加したい機能についてコメントしてください。


    1. MongoでNOTINクエリを実行するにはどうすればよいですか?

    2. mongodbでの単一クエリによる複数カウント

    3. Python APIを使用してRedisで複数の要素でsaddを使用するにはどうすればよいですか?

    4. BsonRepresentation(BsonType.ObjectId)とBsonIdとObjectIdを使用したC#のプロパティの装飾の違い