使用SQL訪問MongoDB

使用SQL訪問MongoDB

簡介

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

本文以macOS爲例進行說明,使用其餘系統的同窗也能夠參考。git

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

img

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

  • mongodrdl
  • mongosqld

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

mongodrdl

它能夠鏈接MongoDB,並生成一個Document-Relational Definition Language (DRDL) 文件,以便將給定MongoDB集合中的數據轉換爲關係型的。數據庫

mongosqld

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

NOTE
本文基本上是官方文檔的一個解釋,英語好的同窗能夠直接參考原文:MongoDB Connector for BI微信

安裝

OpenSSL

使用brew安裝OpenSSLsocket

brew update
brew install openssl

MongoDB

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

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便可。

小結

歡迎你們掃描二維碼關注個人微信公衆號哦,方便在手機上進行閱讀。
個人公衆號

相關文章
相關標籤/搜索