在执行从 sql 到 mongodb 的 etl 时,十进制字段正在转换为 int32
Posted
技术标签:
【中文标题】在执行从 sql 到 mongodb 的 etl 时,十进制字段正在转换为 int32【英文标题】:decimal field is converting to int32 while doing the etl from sql to mongodb 【发布时间】:2017-02-01 17:13:27 【问题描述】:我正在使用 etl 将数据从 sql server 加载到 mongodb。我在 sql 中有一个十进制类型字段,但是当我执行加载过程时,该字段的数据类型在 mongodb 中更改为 int32。有人知道为什么会这样吗? 提前致谢。
【问题讨论】:
Mongo 没有十进制数据类型。根据您的适配器,它可能会将其转换为字符串、整数或双精度/浮点数。 它正在将值转换为 mongodb 中的 int。如果我想将值显示为 double/float,我需要先将十进制转换为 double/float 吗? 是的,当您将数据加载到 Mongo 时,类型应该是 double/float 而不是十进制。您究竟是如何将数据加载到 Mongo 中的?脚本任务?还是一些第三方组件? m 使用派生列将小数转换为浮点数,然后加载到 mongodb 但它仍然采用 int32。 SSIS 本身并不支持连接到我记得的 MongoDB。您必须使用第三方实用程序。该实用程序在如何完成数据类型映射方面可能存在问题。另外,检查你在 Mongo 中的记录,看看你的所有浮点数是否都被转换为 int。例如,1.0 可能会作为 1(int 类型)被推入,但 1.1 可能会作为 1.1(double 类型)被推入。你能验证一下吗? 【参考方案1】:根据我在 cmets 中指定的内容回答:
截至今天,MongoDB 不支持 decimal
类型。您将不得不使用int
或float
/double
。
当您将任何带有.0
的数字(例如1.0)推送到Mongo 时,它会将其记录为int
,但任何像1.1 这样的浮点数都将被视为double
。
这应该不是问题,因为 Mongo 可以很好地运行聚合而无需类型转换。请记住,Mongo 在文档字段级别而不是在 SQL 中的列级别指定类型。如果您将该字段映射到强类型对象的双精度类型,我相信大多数驱动程序都会隐式转换该值。
如果您真的需要这样做,请查看this post,我必须将字段类型从string
更新为double
。同样的逻辑也适用于int
到double
的转换。
【讨论】:
以上是关于在执行从 sql 到 mongodb 的 etl 时,十进制字段正在转换为 int32的主要内容,如果未能解决你的问题,请参考以下文章
对 ETL 的良好 SQL Server 集成服务 (SSIS) 示例/示例的建议?
从 SQL Server 2016 到 SQL Server Management Studio 2005 的 ETL