版本 2.6 中的新增内容。
MongoDB Connector for BI尝试将SQL查询转换为MongoDB 聚合管道。 当BI Connector无法将查询转换为聚合管道时,它会在内存中执行查询,从而导致延迟增加。 在版本2.6之前, mongosqld无法将类型转换转换为聚合表达式,这会阻止转换依赖于类型转换的任何查询。
从版本 2.6 开始, mongosql类型转换模式将所有类型转换下推到运行 4.0 或更高版本的 MongoDB Server,以提高表达式性能。此模式默认启用,但您可以通过将type_conversion_mode会话变量设置为以下值之一,在每个会话的基础上进行配置:
模式 | 说明 |
|---|---|
| 默认。 将所有类型转换下推到运行 4.0 或更高版本的 MongoDB Server。对于 4.0 之前的 MongoDB 版本,BI Connector 在内存中执行类型转换。 |
| 指示 BI Connector 尽可能匹配 MySQL 的类型转换语义。 如果 BI Connector 可以用聚合语言重现 MySQL 的类型转换行为,它就会将表达式下推到 MongoDB Server 上执行。否则, |
以下示例将type_conversion_mode变量设置为mysql :
SET SESSION type_conversion_mode = 'mysql';
重要
mongosql 是推荐的类型转换模式,除非您需要紧密复制 MySQL 的行为。 上面的示例设置了mysql类型转换模式,因为mongosql是默认模式,不需要显式设置。
类型转换模式适用于:
显式类型转换。 例如:
CAST("123" AS unsigned) 隐式类型转换。 例如,
"123" + 456
模式比较表
下表概述了 MySQL 的类型转换行为与 BI Connector 的默认类型转换行为( mongosql模式)的不同之处:
来源类型 | 要键入 | MySQL 行为 | mongosql-mode 行为 |
|---|---|---|---|
Varchar | 数值 | 从各种不同格式的字符串中解析出数字。 有关更多信息,请参阅 MySQL 数字文字 文档。 | 解析十进制格式字符串中的数字,并带有可选的前导符号字符。 |
Varchar | 时间戳 | 从各种不同格式的字符串中解析日期。 有关更多信息,请参阅 MySQL 日期和时间文字。 | 从 |
Int | 时间戳 | 尝试从 int 的 varchar 表示形式解析日期。 例如,整数 | 将输入视为自 Unix 纪元以来的毫秒数。 例如, |
时间戳 | Long | 将时间戳解析为 | 将时间戳解析为表示自 UNIX 纪元以来的毫秒数的长整型值。 例如, |
时间戳 | Varchar | 将时间戳解析为 | 将时间戳解析为 |
注意
mongosql 是推荐的类型转换模式,除非需要紧密复制 MySQL 的行为。