可以试试使用Tableau的MongoDB BI连接器来看一看文档导向型数据库会是什么样子
首先
若使用BI工具分析文档导向数据库,我们将确认生成了哪些表格。
我们将使用Tableau作为BI工具,以及尝试使用MongoDB Atlas作为文档式数据库。
我们选择MongoDB Atlas的原因是因为它可以方便地使用Tableau连接器进行连接。
顺便说一下,我对MongoDB和Tableau都完全是初学者。
可能在术语的使用上有错误。(欢迎指正)
环境
以下是类似的构成图。
主要目的是为了使用BI Connector连接MongoDB,但同时也尝试了以下内容。
-
- [MongoDB Atlas]と[AWS]とのVPCピアリング
- [Tableau]から[Amazon DocumentDB]への接続
版本如下。
另外,Tableau有一个名为”MongoDB BI Connector”的数据源。
MongoDB Atlas有一个名为”BI Connector”的服务。
为了避免混淆,我们将后者称为”Atlas BI Connector”。
准备连接的目标
MongoDB Atlas 可以是一个选择。
设置账户
创建免费版本的群集。
创建DB用户
登记白名单
加载示例数据
信用卡注册
本次的目的是使用BI Connector。BI Connector本身就是需要付费的。而且,要使用它还需要付费版的集群(至少M10级别以上)。为了使用付费版,需要先注册信用卡信息。
创建一个有内容的版块。
启用Atlas BI连接器
完成后,我们还会在这个付费版本的集群中加载示例数据(省略具体步骤)。
确认连接字符串
VPC 对等连接 (VPC Peering)
从Tableau连接到MongoDB Atlas
确认在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”集合的一条数据。它具有如下的结构。例如,可以确认图像字段为对象类型。
以下是图像的实际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"
],
我們現在來看一下對象的嵌套為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
}
]
},
尝试将数据显示在Tableau的工作表上
我尝试根据行业类别和员工人数制作了一个图表。
意味着
-
- オブジェクト単位でテーブルが分割されるものの、自動で追加されるインデックスカラムによって結びつけができるという点は便利です。ドキュメント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。
我试图冒险一次,结果果然还是失败了。
Tableau的「MongoDB BI Connector」并没有DocumentDB的映射功能,它只是一个连接工具。映射功能在MongoDB的BI Connector(Atlas BI Connector)中。
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
您可以使用ODBC从Tableau进行连接。
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
看起来从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处理。
这就是上述的内容。