类型转换模式
在此页面上
版本 2.6 中的新增内容。
MongoDB Connector for BI尝试将SQL查询转换为MongoDB 聚合管道。 当BI Connector无法将查询转换为聚合管道时,它会在内存中执行查询,从而导致延迟增加。 在版本2.6之前, mongosqld
无法将类型转换转换为聚合表达式,这会阻止转换依赖于类型转换的任何查询。
从版本 2.6 开始, mongosql
类型转换模式将所有类型转换下推到运行 4.0 或更高版本的 MongoDB Server,以提高表达式性能。此模式默认启用,但您可以通过将type_conversion_mode
会话变量设置为以下值之一,在每个会话的基础上进行配置:
模式 | 说明 |
---|---|
mongosql | 默认。 将所有类型转换下推到运行 4.0 或更高版本的 MongoDB Server。对于 4.0 之前的 MongoDB 版本,BI Connector 在内存中执行类型转换。 |
mysql | 指示 BI Connector 尽可能匹配 MySQL 的类型转换语义。 如果 BI Connector 可以用聚合语言重现 MySQL 的类型转换行为,它就会将表达式下推到 MongoDB Server 上执行。否则, mongosqld 在内存中执行表达式。 |
以下示例将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 | 数值 | 从各种不同格式的string中解析出数字。 有关更多信息,请参阅MySQL 数字字面 量 文档。 | 解析十进制格式字符串中的数字,并带有可选的前导符号字符。 |
Varchar | 时间戳 | 从各种不同格式的string中解析日期。 有关详细信息,请参阅MySQL 日期和时间文字 。 | 从 "%Y-%m-%dT%H:%M:%S.%LZ" 格式的字符串中解析日期。 |
Int | 时间戳 | 尝试从 int 的 varchar 表示形式解析日期。 例如,整数 20180809183456 变为日期2018-08-09 18:34:56.000000 。 | 将输入视为自 Unix 纪元以来的毫秒数。 例如, 1533839696000 。 |
时间戳 | Long | 将时间戳解析为 YYYYMMDDHHMMSS 格式的长整型。 例如, 20180701123400 。 | 将时间戳解析为表示自 UNIX 纪元以来的毫秒数的长整型值。 例如, 1530448440000 。 |
时间戳 | Varchar | 将时间戳解析为 YYYY-MM-DD HH:MM:SS.MMMMMM 格式的 varchar。 例如, “2018-07-01 12:34:00.000000” 。 | 将时间戳解析为 YYYY-MM-DDTHH:MM:SS:MMMZ 格式的 varchar。 例如, “2018-07-01T12:34:00.000Z” 。 |
注意
mongosql
是推荐的类型转换模式,除非需要紧密复制 MySQL 的行为。