可以试试使用Tableau的MongoDB BI连接器来看一看文档导向型数据库会是什么样子

首先

若使用BI工具分析文档导向数据库,我们将确认生成了哪些表格。

我们将使用Tableau作为BI工具,以及尝试使用MongoDB Atlas作为文档式数据库。
我们选择MongoDB Atlas的原因是因为它可以方便地使用Tableau连接器进行连接。

顺便说一下,我对MongoDB和Tableau都完全是初学者。
可能在术语的使用上有错误。(欢迎指正)

环境

以下是类似的构成图。
主要目的是为了使用BI Connector连接MongoDB,但同时也尝试了以下内容。

    • [MongoDB Atlas]と[AWS]とのVPCピアリング

 

    [Tableau]から[Amazon DocumentDB]への接続
image.png

版本如下。

対象バージョンTableau Desktop2020.3.0MongoDB Atlas4.2.10

另外,Tableau有一个名为”MongoDB BI Connector”的数据源。
MongoDB Atlas有一个名为”BI Connector”的服务。
为了避免混淆,我们将后者称为”Atlas BI Connector”。

准备连接的目标

MongoDB Atlas 可以是一个选择。

设置账户

image.png
image.png

创建免费版本的群集。

image.png
image.png
image.png

创建DB用户

image.png
image.png

登记白名单

image.png

加载示例数据

image.png
image.png
image.png

信用卡注册

本次的目的是使用BI Connector。BI Connector本身就是需要付费的。而且,要使用它还需要付费版的集群(至少M10级别以上)。为了使用付费版,需要先注册信用卡信息。

image.png

创建一个有内容的版块。

image.png

启用Atlas BI连接器

image.png

完成后,我们还会在这个付费版本的集群中加载示例数据(省略具体步骤)。

确认连接字符串

image.png
image.png
image.png

VPC 对等连接 (VPC Peering)

image.png
image.png
image.png
image.png
image.png
image.png

从Tableau连接到MongoDB Atlas

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

确认在BI Connector中的显示方式

(Note: This is a transliteration of the phrase into Chinese characters. For a more accurate translation, please provide the context or specific meaning of the phrase.)

确认表格结构

让我们从MongoDB Atlas中查看”sample_training”数据库中的”companies”集合的一条数据。它具有如下的结构。例如,可以确认图像字段为对象类型。

image.png
image.png

以下是图像的实际JSON数据摘录。其中包含由$numberInt定义类型的数组,以及文件路径字符串的数据。

    "image": {
        "available_sizes": [
            [
                [
                    {
                        "$numberInt": "150"
                    },
                    {
                        "$numberInt": "75"
                    }
                ],
                "assets/images/resized/0000/3604/3604v14-max-150x150.jpg"
            ],
            [
                [
                    {
                        "$numberInt": "250"
                    },
                    {
                        "$numberInt": "125"
                    }
                ],
                "assets/images/resized/0000/3604/3604v14-max-250x250.jpg"
            ],
image.png

我們現在來看一下對象的嵌套為2層的表格原始數據。

    "funding_rounds": [
        {
            "id": {
                "$numberInt": "888"
            },
            "round_code": "a",
            "source_url": "http://seattlepi.nwsource.com/business/246734_wiki02.html",
            "source_description": "",
            "raised_amount": {
                "$numberInt": "5250000"
            },
            "raised_currency_code": "USD",
            "funded_year": {
                "$numberInt": "2005"
            },
            "funded_month": {
                "$numberInt": "10"
            },
            "funded_day": {
                "$numberInt": "1"
            },
            "investments": [
                {
                    "company": null,
                    "financial_org": {
                        "name": "Frazier Technology Ventures",
                        "permalink": "frazier-technology-ventures"
                    },
                    "person": null
                },
                {
                    "company": null,
                    "financial_org": {
                        "name": "Trinity Ventures",
                        "permalink": "trinity-ventures"
                    },
                    "person": null
                }
            ]
        },
image.png
image.png

尝试将数据显示在Tableau的工作表上

image.png
image.png
image.png
image.png
image.png
image.png

我尝试根据行业类别和员工人数制作了一个图表。

image.png

意味着

    • オブジェクト単位でテーブルが分割されるものの、自動で追加されるインデックスカラムによって結びつけができるという点は便利です。ドキュメントDBを表現するにはこういうアプローチしかなさそうですし。

 

    • ただ元データ側は、やはりドキュメント指向なためか文字列型が多く、Tableauで分析するにはメジャーが少ない印象です。

 

    • このサンプルデータはキレイなのでなんとか棒グラフを作ることはできましたが、データによってはTableauの「テキスト表」でしか表現できないケースもあるようです。

データ入力時のバリデーションはアプリの正常動作に必要不可欠な機能だったりしますが、ことドキュメント指向DBに関していえば、BIで分析するためにも重要な機能であると思いました。厳密なバリデーションをかければBIはしやすくなりますが、アプリの柔軟性が落ちます。特定のサブスキーマだけ柔軟性を持たせたいというような場合はどうすればいいのでしょうか。。
[2020.10.16追記]IIJさんの以下のブログが、あいまいな構造のデータを扱う場合に非常に参考になります。

複数のサブスキーマを持つデータへの対応におけるスキーマ記述言語の比較


JSON Schemaなど各種のSchema Validationの得手不得手や、サブスキーマの検索手法(速さ)も含め比較されています。

JTD(JSON Type Definition)がよさそうですがRFC標準化前の状態のようですね。
IETFの読み込みを重視しているという文化も含めて、さすがの記事です。

ですのでtableauで表示をするまえに、どのような分析をしたいか、その分析をするためにどのようなデータ型で定義するか、を検討すべきであるという当たり前の事実を再確認しました。

データパイプラインの後工程(TableauやTableau Prep)で吸収するという手もあるかもしれませんが、あまり試していません。

必要であれば事前にETL処理などを行うべきですし、ETLを行えば何もBIツールから直接ドキュメント指向データベースに接続する必要もない気がします。

在中國第一個自然的選擇中,重述以下句子:

附加(例如從Tableau嘗試連接到Amazon DocumentDB)

直接的途径

通过Tableau的MongoDB BI Connector连接到Amazon DocumentDB。

我试图冒险一次,结果果然还是失败了。

image.png

Tableau的「MongoDB BI Connector」并没有DocumentDB的映射功能,它只是一个连接工具。映射功能在MongoDB的BI Connector(Atlas BI Connector)中。

image.png
image.png

Tableauのカスタムコネクタ(JDBC/ODBC)の利用

有償コネクタ(未検証)

MongoDBへのコネクタは世間にいろいろありますが、試していません。

https://www.progress.com/jdbc/mongodb
http://unityjdbc.com/mongojdbc/mongo_jdbc.php

無償コネクタ

以下のようなものを見つけてGradleでビルドし、JDBCドライバを作り、TDCファイルを置いてみたりしましたが接続できず諦めました。

https://github.com/mongodb/mongo-jdbc-driver

使用ODBC驱动程序连接到Atlas BI Connector。

DocumentDBへのアクセスではなくMongoDB Atlasへの接続です。これはうまくいきました。接続後、Collectionは検索しないと表示されませんでしたが、それ以外は問題なし。
機能的にはMongoDB側のAtlas BI Connectorがあればクライアント側の機能はさほど問われないということなんでしょう。

WindowsにODBCドライバをインストールし、
https://github.com/mongodb/mongo-odbc-driver/releases/
mongodb-connector-odbc-1.4.2-win-64-bit.msi

image.png
image.png
image.png

您可以使用ODBC从Tableau进行连接。

image.png
image.png
image.png
image.png
image.png

ODBCドライバから DocumentDBへ接続

MongoDBのODBCドライバの接続先をDocumentDBに変え、Tableauからそれを指定し接続してみましたが、接続できずテスト接続でフリーズしました。アクセス元がBIツールなので仕方ないです。これができればAtlas BI Connectorの存在理由はありませんし。

间接途径

通过Athena连接到Amazon DocumentDB。

据我所知,Athena似乎具有与DocumentDB连接的功能,因此,通过Athena的方式,能够在Tableau中看到吗?这是一个想法。

    https://docs.aws.amazon.com/ja_jp/athena/latest/ug/athena-prebuilt-data-connectors-docdb.html
image.png

看起来从Tableau的角度来看不行,但我打算在另一个机会中撰写关于Athena的联合查询的文章。

使用Glue作业将ETL处理应用到DocumentDB的模式。

不详细说明了,但是已成功连接到DocumentDB。以下是相关数据的内容。

{
    "_id": "01001",
    "city": "AGAWAM",
    "loc": [
        -72.622739,
        42.070206
    ],
    "pop": 15338,
    "state": "MA"
}

以下是由Glue的DynamicFrame进行的类型识别。

|-- _id: string
|-- city: string
|-- loc: array
|    |-- element: double
|-- pop: int
|-- state: string

我认为因为我们可以正确识别类型,所以可以进行ETL处理。

这就是上述的内容。

广告
将在 10 秒后关闭
bannerAds