Как можно сопоставить двоичные столбцы / столбцы UUID?

Столбец определяется как binary(16) в базе данных и значения UUID,

База данных MySql.

1 ответ

Вы можете выбрать binary поле как string отформатировав его HEX функция. Типичная схема Cube.js в этом случае будет выглядеть так:

cube(`Users`, {
  // ...

  dimensions: {
    companyId: {
      sql: `HEX(${CUBE}.company_uuid)`,
      type: `string`
    }
  }
});

Фильтр для Users.companyId поле в этом случае будет выглядеть

{
  // ...,
  filters: [{
    dimension: "Users.companyId",
    operator: "equals",
    values: ["0123456789ABCDED0123456789ABCDEF"]
  }]
}

Если у вас есть индекс по этому binary столбец, который вы, вероятно, хотите намекнуть планировщик запросов MySQL с FILTER_PARAMS поэтому его можно использовать:

cube(`Users`, {
  sql: `SELECT * FROM users WHERE ${FILTER_PARAMS.Users.companyId.filter(
    v => `company_uuid = UNHEX(${v})`
  )}`,
  // ...

  dimensions: {
    companyId: {
      sql: `HEX(${CUBE}.company_uuid)`,
      type: `string`
    }
  }
});

Узнайте больше о FILTER_PARAMS здесь: https://cube.dev/docs/cube.

Другие вопросы по тегам