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 JOIN
pour 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
Enregistrer un commentaire