使用SQL訪問MongoDB


使用SQL訪問MongoDB

簡介

使用SQL訪問MongoDB有多種解決方案,就我所知的,除了今天要介紹的MongoDB Connector for BI外,還有Studio 3T,但后者只有在企業版中才提供,使用成本之高是可以想見的,而MongoDB Connector for BI則是MongoDB官方推出的,使用也相當方便。

本文以macOS為例進行說明,使用其他系統的同學也可以參考。

MongoDB Connector for BI的作用如下圖所示,它只是做為BI和MongoDB之間的一個代理,將MongoDB的數據轉換為關系型的,並不存儲數據。

img

MongoDB Connector for BI一共有兩個核心組件

  • mongodrdl
  • mongosqld

其實就是兩個可執行文件。

mongodrdl

它可以連接MongoDB,並生成一個Document-Relational Definition Language (DRDL) 文件,以便將給定MongoDB集合中的數據轉換為關系型的。

mongosqld

作為守護進程運行,響應SQL請求,並將其轉換為MongoDB的請求,注意,在啟動mongosqld守護進程先,必須先執行mongodrdl生成相應的DRDL文件。

NOTE
本文基本上是官方文檔的一個解釋,英語好的同學可以直接參考原文:MongoDB Connector for BI

安裝

OpenSSL

使用brew安裝OpenSSL

brew update
brew install openssl

MongoDB

這個不用多說了,安裝社區版即可。

MongoDB Connector for BI

同樣去官方網站進行下載即可,可以免費使用。

配置

生成DRDL

格式如下

mongodrdl --host {your.mongohost.com} -d dbname [-c collname] -o schema.drdl

NOTE
如果MongoDB啟用了密碼,則在生成DRDL時,還需要加-u -p --authenticationDatabase這些認證選項,才能生成DRDL。

啟動mongosqld

NOTE
對於有認證的MongoDB,需要首先執行以下操作:

  1. 在terminal中執行mysql_config --plugindir查看MySQL的插件所在目錄(mysql_config是MySQL安裝目錄中bin目錄下的一個可執行文件)。
  2. 下載C Authentication Plugin——mongosql_auth,進入下載頁面后選擇對應的操作系統進行下載。
  3. 將下載后的文件解壓縮,拷貝lib目錄下的mongosql_auth.so到MySQL的插件目錄中即可,我電腦上的目錄是/usr/local/mysql/lib/plugin

官方文檔給出的啟動方式如下

mongosqld install --config {pathToConfigFile}/mongosqld.conf
sudo service mongosql start

但在macOS下,使用service mongosqld start的方式顯然是無法啟動的。

可以使用如下兩種方式啟動:

使用schema文件

使用mongodrdl生成的DRDL文件,可以直接啟動mongosqld

$ mongosqld --schema <drdl file>

使用config文件

config文件是一種YAML格式的文件,其他配置可以參考官方文檔,但schema一定要指定!

如下是我的config文件,假設名稱為mongosqld.conf

schema:
  path: "/Users/luogang/Dropbox/Development/mongodb/mongodb-bi-x86_64-osx-v2.2.0/bin/candidate.drdl"

使用如下命令啟動mongosqld

$ mongosqld --config mongosqld.conf

NOTE
這兩種方式啟動后,都會監聽3307端口,如果你在本機已經啟動了MySQL Server,有可能mongosqld無法啟動,因為它發現/tmp/mysql.sock已經被使用,這時候可以停止本機的MySQL Server,或者為mongosqld指定新的unix socket(使用--unixSocketPrefix選項)或者不使用UNIX socket(--noUnixSocket選項),但是使用后兩種解決方法要注意,MySQL Client連接時,默認會連接/tmp/mysql.sock,由此導致連接的仍然是MySQL Server,而不是mongosqld。

使用MySQL Client連接

向無認證的MongoDB連接

也就是說,要連接的MongoDB沒有設置密碼,直接連接即可。

$ mysql --protocol tcp --port 3307

向有認證的MongoDB連接

$ mysql '--user=admin?source=admin' --default-auth=mongosql_auth -p

輸入密碼即可連接成功。

NOTE
這一步輸入的用戶名--user為MongoDB的用戶名,source=指定認證數據庫,跟MySQL Server的用戶名密碼沒有一毛錢關系了。

下面這幅圖是Mongo Compass中的截圖

MySQL Client

下面這幅是在MySQL Client中的截圖,可以看出,已經可以使用SQL進行查詢了。

MySQL Client

NOTE
使用其他MySQL客戶端進行連接的同學,可以在連接頁面查看Advanced選項,我在MySQLWorkbench中可以成功連接,在Advanced選項卡中的Others欄填寫--user=admin?source=admin --default-auth=mongosql_auth即可。

小結

歡迎大家掃描二維碼關注我的微信公眾號哦,方便在手機上進行閱讀。
我的公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM