Open SheryarKhaliq125 opened 1 year ago
@SheryarKhaliq125 , I tried to set up two databases recently. Used the following references:
I ended up with the following in my ~/cube/conf/cube.js:
const PostgresDriver = require('@cubejs-backend/postgres-driver').PostgresDriver;
const arango_db_driver = require("arangodb-cubejs-driver/dist/arangodb-driver.js").ArangoDbDriver;
const base_driver = require("@cubejs-backend/query-orchestrator").BaseDriver;
module.exports = {
dbType: ({ dataSource }) => {
switch (dataSource) {
case 'ArangoDB': return process.env.CUBEJS_DB_ARANGO_TYPE;
default: return process.env.CUBEJS_DB_TYPE;
}
},
driverFactory: ({ dataSource }) => {
switch(dataSource) {
case 'ArangoDB':
// Workaround for the absence of inheritance from BaseDriver
Object.setPrototypeOf(arango_db_driver.prototype,base_driver.prototype)
return new arango_db_driver({
url: process.env.CUBEJS_DB_ARANGO_URL,
databaseName: process.env.CUBEJS_DB_ARANGO_NAME,
auth: {
username: process.env.CUBEJS_DB_ARANGO_USER,
password: process.env.CUBEJS_DB_ARANGO_PASS,
},
});
default:
// Should have worked without this line, but it fails to load when switching from "Schema" to "Build" tabs...
Object.setPrototypeOf(PostgresDriver.prototype,base_driver.prototype)
return new PostgresDriver({
//type: process.env.CUBEJS_DB_TYPE,
host: process.env.CUBEJS_DB_HOST,
port: process.env.CUBEJS_DB_PORT,
database: process.env.CUBEJS_DB_NAME,
user: process.env.CUBEJS_DB_USER,
password: process.env.CUBEJS_DB_PASS,
});
}
},
};
It didn't work, can you please provide a code for cube.js to connect 2 MySQL databases simultaneously.
@tokarenko Thanks for the suggestion! While your approach makes sense, it might be an overkill in this specific case :smile:
@SheryarKhaliq125 Please take a look in the docs: https://cube.dev/docs/product/configuration/advanced/multiple-data-sources#environment-variables
Your configuration above makes sense. However, you should also define the CUBEJS_DATASOURCES
environment variable like this:
CUBEJS_DATASOURCES=default,datasource1
It should help resolve the issue.
@igorlukanin I'm experiencing a similar issue while trying to connect/setup multiple data sources in the .env file. I'm connecting to Snowflake as default
and postgres database as datasource1
. Here is what my .env file looks like.
CUBEJS_DATASOURCES=default,datasource1
CUBEJS_DB_USER=snowflakeuser
CUBEJS_DB_PASS=randompassword
CUBEJS_DB_NAME=snowflakedatabase
CUBEJS_DB_SNOWFLAKE_ACCOUNT=abc12345
CUBEJS_DB_SNOWFLAKE_REGION=us-east-1
CUBEJS_DB_SNOWFLAKE_WAREHOUSE=TEST_WH
CUBEJS_DB_SNOWFLAKE_ROLE=USER_ROLE
CUBEJS_DB_TYPE=snowflake
CUBEJS_DS_DATASOURCE1_DB_TYPE=postgres
CUBEJS_DS_DATASOURCE1_DB_NAME=ecom
CUBEJS_DS_DATASOURCE1_DB_HOST=host.docker.internal
CUBEJS_DS_DATASOURCE1_DB_USER=user1
CUBEJS_DS_DATASOURCE1_DB_PASS=randompassword
CUBEJS_DS_DATASOURCE1_DB_PORT=5432
CUBEJS_API_SECRET=HIDDEN
CUBEJS_EXTERNAL_DEFAULT=true
CUBEJS_DEV_MODE=true
CUBEJS_SCHEMA_PATH=model
In the playground I only see the datasource that is defined as default
whether it's snowflake or postgres. The other datasource won't show up. I have tried switching them over to verify if there is any issue with the environment variable values.
Would you please suggest a possible fix?
Same i also added CUBEJS_DATASOURCES=default,datasource1 but still multiple databases not showing up.
I'm facing the same issue.
Can you please provide your data model along with env variables.
@keydunov Are the following variables good?
CUBEJS_DATASOURCES=default,datasource1
CUBEJS_DB_USER=snowflakeuser
CUBEJS_DB_PASS=randompassword
CUBEJS_DB_NAME=snowflakedatabase
CUBEJS_DB_SNOWFLAKE_ACCOUNT=abc12345
CUBEJS_DB_SNOWFLAKE_REGION=us-east-1
CUBEJS_DB_SNOWFLAKE_WAREHOUSE=TEST_WH
CUBEJS_DB_SNOWFLAKE_ROLE=USER_ROLE
CUBEJS_DB_TYPE=snowflake
CUBEJS_DS_DATASOURCE1_DB_TYPE=postgres
CUBEJS_DS_DATASOURCE1_DB_NAME=ecom
CUBEJS_DS_DATASOURCE1_DB_HOST=host.docker.internal
CUBEJS_DS_DATASOURCE1_DB_USER=user1
CUBEJS_DS_DATASOURCE1_DB_PASS=randompassword
CUBEJS_DS_DATASOURCE1_DB_PORT=5432
CUBEJS_API_SECRET=HIDDEN
CUBEJS_EXTERNAL_DEFAULT=true
CUBEJS_DEV_MODE=true
CUBEJS_SCHEMA_PATH=model
Might be related to #6890
Might be related to #6890
@paveltiunov It didn't help. the parameters I used, have the UPPERCASE convention per the documentation. I'm still not able to see both datasources in the playground.
@igorlukanin I'm experiencing a similar issue while trying to connect/setup multiple data sources in the .env file. I'm connecting to Snowflake as
default
and postgres database asdatasource1
. Here is what my .env file looks like.CUBEJS_DATASOURCES=default,datasource1 CUBEJS_DB_USER=snowflakeuser CUBEJS_DB_PASS=randompassword CUBEJS_DB_NAME=snowflakedatabase CUBEJS_DB_SNOWFLAKE_ACCOUNT=abc12345 CUBEJS_DB_SNOWFLAKE_REGION=us-east-1 CUBEJS_DB_SNOWFLAKE_WAREHOUSE=TEST_WH CUBEJS_DB_SNOWFLAKE_ROLE=USER_ROLE CUBEJS_DB_TYPE=snowflake CUBEJS_DS_DATASOURCE1_DB_TYPE=postgres CUBEJS_DS_DATASOURCE1_DB_NAME=ecom CUBEJS_DS_DATASOURCE1_DB_HOST=host.docker.internal CUBEJS_DS_DATASOURCE1_DB_USER=user1 CUBEJS_DS_DATASOURCE1_DB_PASS=randompassword CUBEJS_DS_DATASOURCE1_DB_PORT=5432 CUBEJS_API_SECRET=HIDDEN CUBEJS_EXTERNAL_DEFAULT=true CUBEJS_DEV_MODE=true CUBEJS_SCHEMA_PATH=model
In the playground I only see the datasource that is defined as
default
whether it's snowflake or postgres. The other datasource won't show up. I have tried switching them over to verify if there is any issue with the environment variable values. Would you please suggest a possible fix?
Hi! Have you finally solved it? I've got the same problem :(
@igorlukanin I'm experiencing a similar issue while trying to connect/setup multiple data sources in the .env file. I'm connecting to Snowflake as
default
and postgres database asdatasource1
. Here is what my .env file looks like.CUBEJS_DATASOURCES=default,datasource1 CUBEJS_DB_USER=snowflakeuser CUBEJS_DB_PASS=randompassword CUBEJS_DB_NAME=snowflakedatabase CUBEJS_DB_SNOWFLAKE_ACCOUNT=abc12345 CUBEJS_DB_SNOWFLAKE_REGION=us-east-1 CUBEJS_DB_SNOWFLAKE_WAREHOUSE=TEST_WH CUBEJS_DB_SNOWFLAKE_ROLE=USER_ROLE CUBEJS_DB_TYPE=snowflake CUBEJS_DS_DATASOURCE1_DB_TYPE=postgres CUBEJS_DS_DATASOURCE1_DB_NAME=ecom CUBEJS_DS_DATASOURCE1_DB_HOST=host.docker.internal CUBEJS_DS_DATASOURCE1_DB_USER=user1 CUBEJS_DS_DATASOURCE1_DB_PASS=randompassword CUBEJS_DS_DATASOURCE1_DB_PORT=5432 CUBEJS_API_SECRET=HIDDEN CUBEJS_EXTERNAL_DEFAULT=true CUBEJS_DEV_MODE=true CUBEJS_SCHEMA_PATH=model
In the playground I only see the datasource that is defined as
default
whether it's snowflake or postgres. The other datasource won't show up. I have tried switching them over to verify if there is any issue with the environment variable values. Would you please suggest a possible fix?Hi! Have you finally solved it? I've got the same problem :(
No luck yet. @paveltiunov any suggestions here on how we can make multiple datasources show up on the playground?
@vibudhm There's no way to generate data models for data sources other than for default data sources in the OSS playground. You can only query them through Cubes with different data sources.
@paveltiunov thanks for getting back. Would you please suggest what is the best way to handle multiple datasources to generate data models in the playground? I'm currently using playground as client to generate queries and test. To build data models here is a workaround I'm using; by connecting individual datasource as default, create data models and saving models to a separate folder to make sure files persist after switching out the envars with other datasource. Do you have suggestions for a better approach? thanks!
I'm facing the same issue.
Having the same issue here
If you are interested in working on this issue, please leave a comment below and we will be happy to assign the issue to you. If this is the first time you are contributing a Pull Request to Cube.js, please check our contribution guidelines. You can also post any questions while contributing in the #contributors channel in the Cube.js Slack.
To summarize, when you connect multiple data sources, Playground will still show only one right now. There's currently no support to show all of the connected data sources in the playground during data model generation.
it works as workaround for me.
I just lanuch another cube only another data source (clickhouse). Use this new cube core instance to create new data model file. the .env file setting as mentioned as previous NEED to add new datasource at . step1: modify the file .env CUBEJSDATASOURCES=default,clickhouse,mysql CUBEJSDS_CLICKHOUSE_DB_TYPE=clickhouse
step 2: stop original cube instance and start the new instance services. need add below entry to xxx.yml cubes: data_source: clickhouse
step 3: copy the new yml to original instance under data model folder
After done that, you can find the new cube file at "data model" web site. then you can query the data at the playground.
hope this helps.
Having the same issue here
Having the same issue here
I have already solved this problem, please don't leave To add a new source configuration to the "env" file, you need to add environment variables in the Docker.Pay attention to capitalization issues in configuration,However, it cannot be displayed on the page anymore, but you can access data from multiple sources during modeling
Unfortunately it still doesn't work on my laptop, I have 3 databases in docker-compose enviroment path and also in .env file...and only one I can see from schema web path
Could you please help me?
@mattiaz88 See Pavel's comment above:
To summarize, when you connect multiple data sources, Playground will still show only one right now. There's currently no support to show all of the connected data sources in the playground during data model generation.
Here's what you can do as a workaround:
data_source
options of your cubes accrodinglyIt would take a bit of time but I believe it's not too cumbersome.
I have the same problem with ClickHouse. I followed the latest instructions, but every time, these data models were deleted (or updated) with the last database used. Is there any news about this problem?
It works for the lastest version of cubejs.
first set the .env like this:
CUBEJS_DATASOURCES=default,tenant CUBEJS_DB_HOST=host CUBEJS_DB_PORT=port CUBEJS_DB_NAME=databasename CUBEJS_DB_USER=user CUBEJS_DB_PASS=pass CUBEJS_DB_TYPE=clickhouse CUBEJS_API_SECRET=secret CUBEJS_EXTERNAL_DEFAULT=true CUBEJS_SCHEDULED_REFRESH_DEFAULT=true CUBEJS_DEV_MODE=true CUBEJS_SCHEMA_PATH=model CUBEJS_DS_TENANT_DB_TYPE=postgres CUBEJS_DS_TENANT_DB_HOST=host CUBEJS_DS_TENANT_DB_NAME=databasename CUBEJS_DS_TENANT_DB_USER=user CUBEJS_DS_TENANT_DB_PASS=pass
for cube setting, need explict menthion the data source:
cubes:
cubes:
It would take a bit of time but I believe it's not too cumbersome
That workaround worked for me, just pay attention reviewing the right datasource at the docker-compose.yml CUBEJS_DATASOURCES property
i've updated sql credentials for the cube in the .env file. It successfully accesses the default datasource, but it completely disregards the 2nd datasource.
.env file:
CUBEJS_DB_HOST=matomo.HIDDEN CUBEJS_DB_PORT=3306 CUBEJS_DB_NAME=matomo CUBEJS_DB_USER=tesdb CUBEJS_DB_PASS=HIDDEN CUBEJS_DB_TYPE=mysql CUBEJS_DS_DATASOURCE1_DB_HOST=matomo.HIDDEN CUBEJS_DS_DATASOURCE1_DB_PORT=3306 CUBEJS_DS_DATASOURCE1_DB_NAME=usdata CUBEJS_DS_DATASOURCE1_DB_USER=testdb2 CUBEJS_DS_DATASOURCE1_DB_PASS=HIDDEN CUBEJS_DS_DATASOURCE1_DB_TYPE=mysql CUBEJS_API_SECRET=HIDDEN CUBEJS_EXTERNAL_DEFAULT=true CUBEJS_SCHEDULED_REFRESH_DEFAULT=true CUBEJS_DEV_MODE=true CUBEJS_SCHEMA_PATH=model
It will only show "matomo" db
if I set the default datasource with datasource1 credentials, only the "usdata" database will be displayed. The Cube application entirely disregards datasource1.