【问题标题】:SSIS ETL overflow using BigInt, data is one digit too large使用 BigInt 的 SSIS ETL 溢出,数据一位数太大
【发布时间】:2023-04-04 05:02:01
【问题描述】:

我有一个 ETL SSIS 项目,其中位数对于 Bigint 来说太大了。因为这样,我在运行 dtx 包时遇到了这个溢出问题,并且数据无法传输。

数据以 BigInt 形式从平面文件流向数据仓库。

我的问题是,处理这个问题的最佳方法是什么?

如果我减少一位数,则程序包运行良好。我想知道如何保存那个数字并将其添加到数据库中,或者最好的做法是什么?

任何帮助将不胜感激!

根据我的阅读:

 A BIGINT is always 8 bytes and can store -9223372036854775808 to 
 9223372036854775807 (signed) or 0 to 18446744073709551615 (unsigned).

如果你有更多的数字,你如何在 SSIS 包中处理这个?

我的想法:也许在数据库表中仅为该数字创建一个派生列并将该数字与原始数据分开?你会怎么做?

【问题讨论】:

    标签: ssis etl bigint


    【解决方案1】:

    您可以将其存储为十进制(或双精度)吗?

    【讨论】:

    • 您不能更改开始或结束数据类型,因为公司不允许我这样做。我在想,我可以将最后一位数字分成另一个派生列以延长长度。如果我执行 %10,那么它将给我最后一位数字。然后我在处理过程中将最后一位数字提取到该列中。不过,不知道该怎么做。
    • 我的意思是你可以将它作为十进制存储在 SSIS 中,所以你可以在拉入它时将其转换,然后在另一端以类似的方式处理它,例如,在临时表中(或者它可能会直接进入,我还没有测试过)。
    • 数据库中的数据是数据类型 BigInt。它不会占用那么多数字,所以我认为最好的方法是删除最后一个数字,同时保留该行并将其放入它自己的列中。
    • 我会向公司提出 - 他们想在 bigint 字段中存储比 bigint 更大的数据?
    • 我完全同意并与他们谈过,但他们不会让我更改数据类型(这很糟糕)。但是,我确实认为您可以为溢出的整数创建一个派生列。
    【解决方案2】:

    使用小数或 varchar。

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多