{Denodo}データソース・ラッパー・基本ビュー・インターフェイスビューの作成(MongoDB)

 


https://unityjdbc.com/mongojdbc/mongo_jdbc.php

https://community.denodo.com/answers/question/details?questionId=90670000000TQB7AAO&title=Denodo+MongoDB+Base+Base+View+Creation

https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/

 


CData のトライアル版JDBCドライバーを使用
→ DB接続はできたが、基本ビュー作成時に下記エラー発生
Not supported yet.


Unity のトライアル版JDBCドライバーを使用
→ OK

 


前提: 
Denodo Express インストール、起動済み

 

-- 1. 事前準備(MongoDB)

yum update -y

vim /etc/yum.repos.d/mongodb-org-6.0.repo

[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc


yum install -y mongodb-org

systemctl enable mongod
systemctl restart mongod
systemctl status mongod

mongod --version

vim /etc/mongod.conf

bindIp: 0.0.0.0


systemctl restart mongod
ss -ano | grep 27017

mongosh


use testdb
db.createCollection('tab1')

show dbs
show collections


db.tab1.insertMany([
   { _id: 1, col1: "val11", col2 : 21, col3 : ["val311","val321"], col4: { col41: 411, col42: "val421" } },
   { _id: 2, col1: "val12", col2 : 22, col3 : ["val312","val322"], col4: { col41: 412, col42: "val422" } },
])


db.tab1.find()

 


-- 2. 事前準備(Denodo)

-- 2.1 データベース作成
DROP DATABASE db03 cascade;

CREATE OR REPLACE DATABASE db03 'description of db03'
VCS OFF
CHARSET UNICODE
AUTHENTICATION LOCAL
ODBC AUTHENTICATION NORMAL
CHECK_VIEW_RESTRICTIONS ALWAYS
;

-- 2.2 フォルダ作成
CONNECT DATABASE db03;

CREATE FOLDER '/01ds'  DESCRIPTION 'description of folder01';
CREATE FOLDER '/02bv'  DESCRIPTION 'description of folder02';
CREATE FOLDER '/03iv'  DESCRIPTION 'description of folder03';


-- 2.3 JAR Fileのコピー

フォルダ「unity-mongodb」を作成し、
UnityJDBC_Trial_Install.jarをダブルクリックで展開した中にある、mongodb_unityjdbc_full.jarを下記にコピーする


C:\Program Files\UnityJDBC
mongodb_unityjdbc_full.jar

C:\Denodo\DenodoPlatform8.0\lib\extensions\jdbc-drivers-external\unity-mongodb
mongodb_unityjdbc_full.jar

 


VDP再起動

 

 

-- 3. データソース作成

 


CREATE OR REPLACE DATASOURCE JDBC mongodb
    FOLDER = '/01ds'
    DRIVERCLASSNAME = 'mongodb.jdbc.MongoDriver'
    DATABASEURI = 'jdbc:mongo://192.168.137.127:27017/testdb'
    USERNAME = ''
    USERPASSWORD = ''
    CLASSPATH = 'unity-mongodb'
    DATABASENAME = 'Generic'
    DATABASEVERSION = ''
    FETCHSIZE = 1000
    VALIDATIONQUERY = ''
    INITIALSIZE = 4
    MAXIDLE = 0
    MINIDLE = 0
    MAXACTIVE = 20
    EXHAUSTEDACTION = 0
    TESTONBORROW = true
    TESTONRETURN = false
    TESTWHILEIDLE = false
    TIMEBETWEENEVICTION = 0
    NUMTESTPEREVICTION = 0
    MINEVICTABLETIME = 0
    POOLPREPAREDSTATEMENTS = false
    MAXOPENPREPAREDSTATEMENTS = 0
    DATA_LOAD_CONFIGURATION (
        BATCHINSERTSIZE = 200
    );

 

-- 4. ラッパー作成


CREATE OR REPLACE WRAPPER JDBC b_tab1
    FOLDER = '/02bv'
    DATASOURCENAME=mongodb
    SCHEMANAME='testdb' 
    RELATIONNAME='tab1' 
    OUTPUTSCHEMA (
        _id = '_id' :'java.lang.Integer' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='10', description='', sourcetypeid='4', sourcetypename='INTEGER')  ESCAPE NOT NULL SORTABLE,
        col1 = 'col1' :'java.lang.String' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='16793600', description='', sourcetypeid='12', sourcetypename='VARCHAR')  NOT NULL SORTABLE,
        col2 = 'col2' :'java.lang.Integer' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='10', description='', sourcetypeid='4', sourcetypename='INTEGER')  NOT NULL SORTABLE,
        col3 = 'col3' :'java.lang.String' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='16793600', description='', sourcetypeid='2003', sourcetypename='ARRAYLIST')  NOT NULL NOT SORTABLE,
        "col3.[0-2147483647]" = 'col3.[0-2147483647]' :'java.lang.String' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='16793600', description='', sourcetypeid='12', sourcetypename='VARCHAR')  ESCAPE NOT NULL SORTABLE,
        col4 = 'col4' :'java.lang.String' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='16793600', description='', sourcetypeid='-2000', sourcetypename='HASHMAP/JSON')  NOT NULL NOT SORTABLE,
        "col4.col41" = 'col4.col41' :'java.lang.Integer' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='10', description='', sourcetypeid='4', sourcetypename='INTEGER')  ESCAPE NOT NULL SORTABLE,
        "col4.col42" = 'col4.col42' :'java.lang.String' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='16793600', description='', sourcetypeid='12', sourcetypename='VARCHAR')  ESCAPE NOT NULL SORTABLE
    )
    CONSTRAINT 'pk_tab1' PRIMARY KEY ( '_id' )
    INDEX '_id_' CLUSTER PRIMARY ( '_id' );

 

-- 5. 基本ビュー作成

CREATE OR REPLACE TABLE b_tab1 I18N jp (
        _id:int (notnull, sourcetypeid = '4', sourcetyperadix = '10', sourcetypedecimals = '0', sourcetypesize = '10', description = ''),
        col1:text (notnull, sourcetypeid = '12', sourcetyperadix = '10', sourcetypedecimals = '0', sourcetypesize = '16793600', description = ''),
        col2:int (notnull, sourcetypeid = '4', sourcetyperadix = '10', sourcetypedecimals = '0', sourcetypesize = '10', description = ''),
        col3:text,
        "col3.[0-2147483647]":text (notnull, sourcetypeid = '12', sourcetyperadix = '10', sourcetypedecimals = '0', sourcetypesize = '16793600', description = ''),
        col4:text,
        "col4.col41":int (notnull, sourcetypeid = '4', sourcetyperadix = '10', sourcetypedecimals = '0', sourcetypesize = '10', description = ''),
        "col4.col42":text (notnull, sourcetypeid = '12', sourcetyperadix = '10', sourcetypedecimals = '0', sourcetypesize = '16793600', description = '')
    )
    FOLDER = '/02bv'
    CONSTRAINT 'pk_tab1' PRIMARY KEY ( '_id' )
    CACHE OFF
    TIMETOLIVEINCACHE DEFAULT
    ADD SEARCHMETHOD b_tab1(
        I18N jp
        CONSTRAINTS (
             ADD _id (any) OPT ANY
             ADD col1 (any) OPT ANY
             ADD col2 (any) OPT ANY
             ADD col3 (any) OPT ANY
             ADD "col3.[0-2147483647]" (any) OPT ANY
             ADD col4 (any) OPT ANY
             ADD "col4.col41" (any) OPT ANY
             ADD "col4.col42" (any) OPT ANY
        )
        OUTPUTLIST (_id, col1, col2, col3, "col3.[0-2147483647]", col4, "col4.col41", "col4.col42"
        )
        WRAPPER (jdbc b_tab1)
    );

 

-- 6. インターフェイスビュー作成

CREATE OR REPLACE INTERFACE VIEW i_tab1 (
        _id:int (sourcetypedecimals = '0', sourcetyperadix = '10', sourcetypesize = '10', sourcetypeid = '4'),
        col1:text (sourcetypedecimals = '0', sourcetyperadix = '10', sourcetypesize = '16793600', sourcetypeid = '12'),
        col2:int (sourcetypedecimals = '0', sourcetyperadix = '10', sourcetypesize = '10', sourcetypeid = '4'),
        col3:text,
        "col3.[0-2147483647]":text (sourcetypedecimals = '0', sourcetyperadix = '10', sourcetypesize = '16793600', sourcetypeid = '12'),
        col4:text,
        "col4.col41":int (sourcetypedecimals = '0', sourcetyperadix = '10', sourcetypesize = '10', sourcetypeid = '4'),
        "col4.col42":text (sourcetypedecimals = '0', sourcetyperadix = '10', sourcetypesize = '16793600', sourcetypeid = '12')
    )
    SET IMPLEMENTATION b_tab1
    FOLDER = '/03iv';

 


-- 7. 動作確認

SELECT * FROM GET_ELEMENTS()
where input_database_name = 'db03'
;

SELECT * FROM db03.b_tab1 CONTEXT('cache_wait_for_load' = 'true') TRACE

SELECT * FROM db03.i_tab1 CONTEXT('cache_wait_for_load' = 'true') TRACE