使用 Cube.js 的外部联接
Outer join using Cube.js
我正在使用 Cube.js 从 Postgres 获取数据。默认情况下,cube.js 对 2 个选定的表执行左连接。有没有办法通过Full Outer Join得到结果?
用户注册Table
身份证时间
1 10.00
3 9.00
上次活动 Table
身份证时间
1 11.00
2 10.00
所以我想要的输出是
ID Last_active_time Register_time
1 11.00 10.00
2 10.00 ----
3 ---- 9.00
Cube.js仅使用LEFT JOIN
表达立方体之间的关系,目的是鼓励正确的Cube.js模式设计:https://cube.dev/docs/joins。您的情况可以表示为以下 Cube.js 模式:
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
}
}
});
查询以获得所需结果:
{
measures: ['UsersLastActive.lastActiveTime', 'UsersRegister.registerTime'],
dimensions: ['Users.id']
}
我正在使用 Cube.js 从 Postgres 获取数据。默认情况下,cube.js 对 2 个选定的表执行左连接。有没有办法通过Full Outer Join得到结果?
用户注册Table
身份证时间
1 10.00
3 9.00
上次活动 Table
身份证时间
1 11.00
2 10.00
所以我想要的输出是
ID Last_active_time Register_time
1 11.00 10.00
2 10.00 ----
3 ---- 9.00
Cube.js仅使用LEFT JOIN
表达立方体之间的关系,目的是鼓励正确的Cube.js模式设计:https://cube.dev/docs/joins。您的情况可以表示为以下 Cube.js 模式:
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
}
}
});
查询以获得所需结果:
{
measures: ['UsersLastActive.lastActiveTime', 'UsersRegister.registerTime'],
dimensions: ['Users.id']
}