cube.js schema 定义多datasource 说明

实际上我以前有写过类似的使用比较简单,以下明确说明下

参考cube schema 定义

const {MySqlDriver,MySqlQuery} = require("mymysql-cubejs-driver")
const {DremioDriver,DremioQuery} = require("mydremio-cubejs-driver")
module.exports = {
    // 此方法对于自定义driver 还是比较重要的,会暴露一个dbType的属性信息
    dialectFactory: (context) => {
        if(context.dbType==="mymysql") {
            return MySqlQuery
        }
        if(context.dbType==="mydremio"){
            return DremioQuery
        }
 
    },
    dbType: ({ dataSource } = {}) => {
        console.log("dbTyped",dataSource)
        if(dataSource==="web") {
            return "mymysql"
        }
        if(dataSource==="dremio"){
            return "mydremio"
        }
        // default 很重要,不然你的代码肯定会有问题的,通过代码也可以看到,而且官方文档也有说明
        if(dataSource==="default"){
            return "mymysql"
        }
    },
    driverFactory: ({dataSource}={}) => {
        console.log("driverFactory",dataSource)
        if(dataSource==="web"){
            return new MySqlDriver({})
        }
        if(dataSource==="dremio"){
            return new DremioDriver({
            })
        }
        // default 很重要,不然你的代码肯定会有问题的,通过代码也可以看到,而且官方文档也有说明
        if(dataSource==="default"){
            return new MySqlDriver({
            })
        }
    }
};

说明

以上代码使用了自定义driver,遵循了cube.js 自定义driver 的开发模式<name>-cubejs-driver
同时上边的default 也是一个比较重要的点,我们需要添加default 实现,dialectFactory 对于我们自己开发的
driver 是一个比较重要的,说明以前开发的dremio 以及mysql,cratedb 的driver 我也已经修改为遵循cube.js
标准的名称了(如果driver 提供了静态的dialectClass 也就不是必须的了。。。)

参考资料

https://cube.dev/docs/schema/reference/cube#data-source
https://cube.dev/docs/multitenancy-setup#multiple-schema-and-drivers

posted on 2021-11-18 22:44  荣锋亮  阅读(154)  评论(0编辑  收藏  举报

导航