如何映射二进制/ UUID列?

时间:2019-08-23 05:45:58

标签: cube.js

该列在数据库中定义为binary(16),值是UUID

数据库是MySql。

1 个答案:

答案 0 :(得分:0)

您可以使用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列上有索引,则可能要使用FILTER_PARAMS提示MySQL查询计划程序,以便可以使用它:

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`
    }
  }
});

https://cube.dev/docs/cube#context-variables-filter-params上详细了解FILTER_PARAMS