1. 程式人生 > 其它 >cube.js schema 定義多datasource 說明

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