Внешнее соединение с использованием Cube.js - PullRequest
0 голосов
/ 30 октября 2019

Я использую Cube.js для получения данных из Postgres. По умолчанию cube.js выполняет левое объединение для 2 выбранных таблиц. Есть ли способ получить результат с помощью полного внешнего соединения?

Таблица регистрации пользователей
ID TIME
1 10.00
3 9.00

Последняя активная таблица
ID TIME
1 11.00
2 10.00

Итак, вывод, который я хочу получить
ID Last_active_time Register_time
1 11.00 10.00
2 10.00 ----
3 ---- 9,00

1 Ответ

0 голосов
/ 31 октября 2019

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 = ${UsersRegister}.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']
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...