Jointure externe utilisant Cube.js

J'utilise Cube.js pour récupérer les données de Postgres. Par défaut, cube.js effectue une jointure gauche sur 2 tables sélectionnées. Existe-t-il un moyen d'obtenir le résultat par Full Outer Join?

ID de table de registre d'utilisateur
HEURE
1 10,00
3 9,00

ID de la dernière table active
HEURE
1 11.00
2 10.00

Donc la sortie que je veux est
ID Last_active_time Register_time
1 11.00 10.00
2 10.00 ----
3 ---- 9.00


Solution du problème

Cube.js utilise uniquement LEFT JOINpour exprimer la relation entre les cubes dans le but d'encourager la bonne conception du schéma Cube.js : https://cube.dev/docs/joins. Votre cas peut être exprimé comme le schéma Cube.js suivant :

cube(`Users`, {
sql: `
SELECT DISTINCT id FROM users_register
UNION
SELECT DISTINCT id FROM last_active`,
joins: {
UsersRegister: {
sql: `${Users}.id = ${UsersRegister}.id`,
relationship: `hasMany`
},
UsersLastActive: {
sql: `${Users}.id = ${UsersLastActive}.id`,
relationship: `hasMany`
}
},
dimensions: {
id: {
sql: `id`,
type: `number`,
primaryKey: true
}
}
});
cube(`UsersRegister`, {
sql: `select * from users_register`,
measures: {
registerTime: {
sql: `time`,
type: `min`
}
},
dimensions: {
id: {
sql: `id`, // if id is unique within users_register
type: `number`,
primaryKey: true
}
}
});
cube(`UsersLastActive`, {
sql: `select * from last_active`,
measures: {
lastActiveTime: {
sql: `time`,
type: `max`
}
},
dimensions: {
id: {
sql: `id`, // if id is unique within last_active
type: `number`,
primaryKey: true
}
}
});

Requête pour obtenir le résultat souhaité :

{
measures: ['UsersLastActive.lastActiveTime', 'UsersRegister.registerTime'],
dimensions: ['Users.id']
}

Commentaires

Posts les plus consultés de ce blog

Comment signer la connexion OKEx API version 5 avec websockets ?

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables