实际上我以前有写过类似的使用比较简单,以下明确说明下
参考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