【问题标题】:Determine which numeric column definition is the most precise确定哪个数字列定义最精确
【发布时间】:2021-11-06 04:50:51
【问题描述】:

我希望确定多列中的哪种列类型最精确,可以将数据合并到一个联合列中。这些类型可能因数字类型而异:floatlongdouble,以及 decimal 的不同精度和小数位数。我的问题是,如何确定哪个是“最精确”的,以免在转换过程中因截断而丢失数据?一个例子,我有这样的列:

decimal(10,0)
decimal(18,3)
decimal(10,6)
long
double
float

我需要将所有这些列合并为一种不会丢失任何数据的数据类型。结果数据类型是什么?我的想法是 decimal > double > float > long 所以结果类型将是 decimal 然后我们采用最大比例 6 并将其添加到最大精度 18 减去最大精度缩放 3 以获得类型 decimal(21, 6)。这将保留第 3 列小数点右侧 6 位,但也允许第 2 列小数点左侧 15 位。

【问题讨论】:

  • 您使用的是哪个 dbms?我希望 dbms 选择正确的结果数据类型。
  • 这是一个带有显式类型的 Spark 应用程序(不能加入不同的数据类型)。我正在尝试构建由具有自己类型的不同来源填充的基础表的架构。我必须将这些值从文本文件转换为统一类型

标签: python sql pyspark types


【解决方案1】:

这个问题没有单一的答案,因为floatdouble 的范围比其他的要大得多。所以,你可能不得不选择double 只是为了代表价值

long 的范围最大为 9,223,372,036,854,775,807,即 19 位数字。所以,前四种类型都兼容decimal(26, 6)。这对于float/double 来说可能也足够了,但您确实需要调查这些值的范围。

【讨论】:

  • 感谢您的洞察力,我认为这可能是最好的情况。 98% 的情况下,来源之间没有区别,但正是这 2% 导致了问题。我认为演员加倍在特定条件下可能是安全的。
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 2016-06-27
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2017-05-06
  • 2013-05-07
  • 1970-01-01
相关资源
最近更新 更多