处理小数数据

本页面介绍了如何将字段转换为小数并执行 在 Wrangler 工作区中准备数据时,会进行转换 Cloud Data Fusion Studio。

读取十进制数据

  1. 转到 Cloud Data Fusion 中的 Wrangler 工作区
  2. 从数据库或 Cloud Storage 文件中打开对象(例如表)。

    • 对于数据库或 BigQuery 连接,如果表 具有小数列,Wrangler 会将其转换为 BigDecimal 类型。时间 从 Wrangler 创建流水线,然后将该列转换为 decimal 数据类型。
    • 如果数据集包含要转换为的非十进制数据 小数点后,请使用 set-column 指令:

      set-column : DECIMAL_COLUMN exp:{new("java.math.BigDecimal", INPUT_COLUMN)}
      

      替换以下内容:

      • DECIMAL_COLUMN:要计算的小数列 进行了转换。指令执行后,该列的数据类型会更改为 BigDecimal,并且架构中也会包含相应的数据类型。

      • INPUT_COLUMN:要转换的列。 可以是以下类型之一:STRINGINTEGERLONGFLOATDOUBLE

    • 如果您的数据集包含不同精度的值(例如 1.05、2.698、5.8745512),请使用 Wrangler 指令设置精度,并修改数据流中的架构以设置小数列的精度。

      要在 Wrangler 中设置比例,请使用类似于 以下:

      set-column : OUTPUT_COLUMN exp:{new("java.math.BigDecimal", DECIMAL_COLUMN).setScale()}
      

      以下示例将名为 cost 的列从字符串转换为小数,设置小数位数为 9,并将结果输出到名为 output-column 的新列:

      set-column : output-column exp:{new("java.math.BigDecimal", "cost").setScale(9)}
      

转换十进制数据

Wrangler 中的小数列使用 Java BigDecimal 类。 将列转换为 BigDecimal 数据类型后,使用 Class BigDecimal 中的方法转换列。

转换 指令
获取绝对值 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.abs()
获取小数值的精度 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.precision()
获取小数值的比例 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.scale()
获取小数值的未调整值 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.unscaledValue()
将两列小数相加 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.add(DECIMAL_COLUMN_2)
将小数减去其他小数 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.subtract(DECIMAL_COLUMN_2)
将一个小数与另一个小数相乘 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.multiply(DECIMAL_COLUMN_2)
将一个小数列除以另一个小数列,并返回商数 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.divide(DECIMAL_COLUMN_2)
将一个小数列除以另一个小数列,并返回余数 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.remainder(DECIMAL_COLUMN_2)
将小数转换为整数 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.intValue()
将十进制数转换为长整型数 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.longValue()
将十进制数转换为浮点数 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.floatValue()
将十进制数转换为双精度数 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.doubleValue()
检查小数值是否等于其他小数值 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.equals(DECIMAL_COLUMN_2)
求两个小数列中的最大值 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.max(DECIMAL_COLUMN_2)
找到两个小数列的最小值 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.min(DECIMAL_COLUMN_2)
向左移动小数点 n 位 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.movePointLeft(n)
向右移动小数点 n 位 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.movePointRight(n)
计算小数的 n 次方 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.pow(n)
对小数进行求反 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.negate()
去除小数中的尾随零 set-column : OUTPUT_COLUMN DECIMAL_COLUMN.stripTrailingZeros()

替换以下内容:

  • OUTPUT_COLUMN:包含模型的输出 操作。
  • DECIMAL_COLUMN:要转换的十进制列。
  • DECIMAL_COLUMN_2:操作中包含的第二个小数列,例如当您将两个小数列中的值相加时。

后续步骤