在执行从 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 类型。您将不得不使用intfloat/double

当您将任何带有.0 的数字(例如1.0)推送到Mongo 时,它会将其记录为int,但任何像1.1 这样的浮点数都将被视为double

这应该不是问题,因为 Mongo 可以很好地运行聚合而无需类型转换。请记住,Mongo 在文档字段级别而不是在 SQL 中的列级别指定类型。如果您将该字段映射到强类型对象的双精度类型,我相信大多数驱动程序都会隐式转换该值。

如果您真的需要这样做,请查看this post,我必须将字段类型从string 更新为double。同样的逻辑也适用于intdouble 的转换。

【讨论】:

以上是关于在执行从 sql 到 mongodb 的 etl 时,十进制字段正在转换为 int32的主要内容,如果未能解决你的问题,请参考以下文章

将数据从MongoDB导入SQL Server

对 ETL 的良好 SQL Server 集成服务 (SSIS) 示例/示例的建议?

从SQL Server到MySQL的ETL实现

从 SQL Server 2016 到 SQL Server Management Studio 2005 的 ETL

我应该如何执行 SQL ETL 脚本和 SPROC 的自动化测试?

ETL-kettle-阻塞数据(执行sql脚本)/阻塞数据直到数据都完成