Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2237,9 +2237,9 @@ lines-and-columns@^1.1.6:
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==

lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
version "4.17.23"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.23.tgz#58c4360fd1b5d33afc6c0bbd3d1149349b1138e0"
integrity sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==

lodash.get@^4.4.2:
version "4.4.2"
Expand Down
11 changes: 11 additions & 0 deletions examples/recipes/joining-multiple-databases-data/.env
Original file line number Diff line number Diff line change
@@ -1,2 +1,13 @@
CUBEJS_API_SECRET=SECRET
CUBEJS_DEV_MODE=true

# Suppliers datasource (Postgres)
CUBEJS_DS_SUPPLIERS_DB_HOST=
CUBEJS_DS_SUPPLIERS_DB_NAME=
CUBEJS_DS_SUPPLIERS_DB_USER=
CUBEJS_DS_SUPPLIERS_DB_PASS=

# Products datasource (BigQuery)
CUBEJS_DS_PRODUCTS_BQ_PROJECT_ID=
CUBEJS_DS_PRODUCTS_EXPORT_BUCKET=
CUBEJS_DS_PRODUCTS_BQ_CREDENTIALS=
39 changes: 36 additions & 3 deletions examples/recipes/joining-multiple-databases-data/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,40 @@
# Joining Multiple Databases Data

This example demonstrates how to join data from multiple databases (PostgreSQL and BigQuery) using Cube.

## Setup

1. Configure the `.env` file with your database credentials:

```env
# Suppliers datasource (Postgres)
CUBEJS_DS_SUPPLIERS_DB_HOST=your-postgres-host
CUBEJS_DS_SUPPLIERS_DB_NAME=your-database
CUBEJS_DS_SUPPLIERS_DB_USER=your-user
CUBEJS_DS_SUPPLIERS_DB_PASS=your-password

# Products datasource (BigQuery)
CUBEJS_DS_PRODUCTS_BQ_PROJECT_ID=your-project-id
CUBEJS_DS_PRODUCTS_EXPORT_BUCKET=your-export-bucket
CUBEJS_DS_PRODUCTS_BQ_CREDENTIALS={"type":"service_account",...}
```

2. Start Cube:

```shell
docker-compose up cube
```

3. Run the sample query:

```shell
docker-compose up query
```

Or query manually:

```shell
$ yarn install
$ rm -Rf .cubestore && yarn dev
$ curl -G --data-urlencode 'query={
curl -G --data-urlencode 'query={
"order": {
"Products.name": "asc"
},
Expand Down
39 changes: 17 additions & 22 deletions examples/recipes/joining-multiple-databases-data/cube.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,3 @@
const BigQueryDriver = require('@cubejs-backend/bigquery-driver');
const PostgresDriver = require('@cubejs-backend/postgres-driver');

function bigquery() {
// CUBEJS_DB_BQ_PROJECT_ID
// CUBEJS_DB_EXPORT_BUCKET
// CUBEJS_DB_BQ_CREDENTIALS
return new BigQueryDriver({})
}

function postgres() {
// CUBEJS_DB_HOST
// CUBEJS_DB_NAME
// CUBEJS_DB_USER
// CUBEJS_DB_PASS
return new PostgresDriver({})
}

module.exports = {
dbType: ({ dataSource }) => {
switch (dataSource) {
Expand All @@ -26,10 +8,23 @@ module.exports = {
},

driverFactory: ({ dataSource }) => {
switch (dataSource) {
case 'suppliers': return postgres();
case 'products': return bigquery();
default: throw new Error(`driverFactory: Invalid dataSource '${dataSource}'`);
if (dataSource === 'suppliers') {
return {
type: 'postgres',
host: process.env.CUBEJS_DS_SUPPLIERS_DB_HOST,
database: process.env.CUBEJS_DS_SUPPLIERS_DB_NAME,
user: process.env.CUBEJS_DS_SUPPLIERS_DB_USER,
password: process.env.CUBEJS_DS_SUPPLIERS_DB_PASS,
};
}
if (dataSource === 'products') {
return {
type: 'bigquery',
projectId: process.env.CUBEJS_DS_PRODUCTS_BQ_PROJECT_ID,
credentials: process.env.CUBEJS_DS_PRODUCTS_BQ_CREDENTIALS,
exportBucket: process.env.CUBEJS_DS_PRODUCTS_EXPORT_BUCKET,
};
}
throw new Error(`driverFactory: Invalid dataSource '${dataSource}'`);
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
version: '2.2'

services:
cube:
image: cubejs/cube:latest
ports:
- 4000:4000
- 3000:3000
env_file: .env
volumes:
- .:/cube/conf

query:
image: cfmanteiga/alpine-bash-curl-jq
depends_on:
- cube
volumes:
- .:/query
entrypoint: ["sh", "query/queries/run.sh"]
15 changes: 0 additions & 15 deletions examples/recipes/joining-multiple-databases-data/package.json

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"order": {
"Products.name": "asc"
},
"dimensions": [
"Products.name",
"Suppliers.company",
"Suppliers.email"
],
"limit": 3
}
21 changes: 21 additions & 0 deletions examples/recipes/joining-multiple-databases-data/queries/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash

host=cube
port=4000
loadUrl=cubejs-api/v1/load
readyzUrl=readyz

token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoib3BlcmF0b3IiLCJpYXQiOjE2Mjg3NDUwNDUsImV4cCI6MTgwMTU0NTA0NX0.VErb2t7Bc43ryRwaOiEgXuU5KiolCT-69eI_i2pRq4o

query=$(cat query/queries/query.json)

# Wait for the Cube API to become ready
until curl -s "$host":"$port"/"$readyzUrl" > /dev/null; do
sleep 1
done

# Send the query
curl "$host":"$port"/"$loadUrl" -H "Authorization: ${token}" -G -s --data-urlencode "query=${query}" -o productsResponse.json

echo "Products with supplier information (joined from multiple databases)"
jq ".data" productsResponse.json
Loading
Loading