Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 3a5a907

Browse files
committedMar 7, 2025·
Changes Made:
- Added the aggregatedTruncTotal Measure and the absAggregatedTruncTotal Measure. - Added the tests for these Measures. - Made amendments to the function to not include double casts. - Changed the result from BigDecimal to LongValue.
1 parent ff0ed63 commit 3a5a907

File tree

3 files changed

+14
-26
lines changed

3 files changed

+14
-26
lines changed
 

‎agent/src/main/scala/za/co/absa/atum/agent/model/Measure.scala

+4-16
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,6 @@ final case class UnknownMeasure(measureName: String, measuredColumns: Seq[String
3939

4040
object AtumMeasure {
4141

42-
// val supportedMeasureNames: Seq[String] = Seq(
43-
// RecordCount.measureName,
44-
// DistinctRecordCount.measureName,
45-
// SumOfValuesOfColumn.measureName,
46-
// AbsSumOfValuesOfColumn.measureName,
47-
// SumOfTruncatedValuesOfColumn.measureName,
48-
// AbsSumOfTruncatedValuesOfColumn.measureName,
49-
// SumOfHashesOfColumn.measureName
50-
// )
51-
5242
case class RecordCount private (measureName: String) extends AtumMeasure {
5343
private val columnExpression = count("*")
5444

@@ -120,8 +110,7 @@ object AtumMeasure {
120110
}
121111

122112
case class SumOfTruncatedValuesOfColumn private (measureName: String, measuredCol: String) extends AtumMeasure {
123-
//Cast to LongType to remove decimal points then cast back to decimal to ensure compatibility
124-
//private val columnAggFn: Column => Column = column => sum(column.cast(LongType).cast(DecimalType(38, 0)))
113+
125114
private val columnAggFn: Column => Column = column => sum(when(column >= 0, floor(column)).otherwise(ceil(column)))
126115

127116
override def function: MeasurementFunction = (ds: DataFrame) => {
@@ -131,16 +120,15 @@ object AtumMeasure {
131120
}
132121

133122
override def measuredColumns: Seq[String] = Seq(measuredCol)
134-
override val resultValueType: ResultValueType = ResultValueType.BigDecimalValue
123+
override val resultValueType: ResultValueType = ResultValueType.LongValue
135124
}
136125
object SumOfTruncatedValuesOfColumn {
137126
private[agent] val measureName: String = "aggregatedTruncTotal"
138127
def apply(measuredCol: String): SumOfTruncatedValuesOfColumn = SumOfTruncatedValuesOfColumn(measureName, measuredCol)
139128
}
140129

141130
case class AbsSumOfTruncatedValuesOfColumn private (measureName: String, measuredCol: String) extends AtumMeasure {
142-
//Cast to LongType to remove decimal points then cast back to decimal to ensure compatibility
143-
//private val columnAggFn: Column => Column = column => sum(abs(column.cast(LongType).cast(DecimalType(38, 0))))
131+
144132
private val columnAggFn: Column => Column = column => sum(abs(when(column >= 0, floor(column)).otherwise(ceil(column))))
145133

146134
override def function: MeasurementFunction = (ds: DataFrame) => {
@@ -150,7 +138,7 @@ object AtumMeasure {
150138
}
151139

152140
override def measuredColumns: Seq[String] = Seq(measuredCol)
153-
override val resultValueType: ResultValueType = ResultValueType.BigDecimalValue
141+
override val resultValueType: ResultValueType = ResultValueType.LongValue
154142
}
155143
object AbsSumOfTruncatedValuesOfColumn {
156144
private[agent] val measureName: String = "absAggregatedTruncTotal"

‎agent/src/test/scala/za/co/absa/atum/agent/model/AtumMeasureUnitTests.scala

+6-6
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,13 @@ class AtumMeasureUnitTests extends AnyFlatSpec with Matchers with SparkTestBase
129129
assert(dfFullSalarySumResult.resultValue == "2987144")
130130
assert(dfFullSalarySumResult.resultValueType == ResultValueType.BigDecimalValue)
131131
assert(dfExtraPersonSalarySumTruncResult.resultValue == "2989144")
132-
assert(dfExtraPersonSalarySumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
132+
assert(dfExtraPersonSalarySumTruncResult.resultValueType == ResultValueType.LongValue)
133133
assert(dfFullSalarySumTruncResult.resultValue == "2987144")
134-
assert(dfFullSalarySumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
134+
assert(dfFullSalarySumTruncResult.resultValueType == ResultValueType.LongValue)
135135
assert(dfExtraPersonSalaryAbsSumTruncResult.resultValue == "2991144")
136-
assert(dfExtraPersonSalaryAbsSumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
136+
assert(dfExtraPersonSalaryAbsSumTruncResult.resultValueType == ResultValueType.LongValue)
137137
assert(dfFullSalaryAbsSumTruncResult.resultValue == "2987144")
138-
assert(dfFullSalaryAbsSumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
138+
assert(dfFullSalaryAbsSumTruncResult.resultValueType == ResultValueType.LongValue)
139139
}
140140

141141
"AbsSumOfValuesOfColumn" should "return expected value" in {
@@ -229,7 +229,7 @@ class AtumMeasureUnitTests extends AnyFlatSpec with Matchers with SparkTestBase
229229
val result = distinctCount.function(df)
230230

231231
assert(result.resultValue == "2")
232-
assert(result.resultValueType == ResultValueType.BigDecimalValue)
232+
assert(result.resultValueType == ResultValueType.LongValue)
233233
}
234234

235235
"AbsSumTruncOfValuesOfColumn" should "return expected value" in {
@@ -244,6 +244,6 @@ class AtumMeasureUnitTests extends AnyFlatSpec with Matchers with SparkTestBase
244244
val result = distinctCount.function(df)
245245

246246
assert(result.resultValue == "4")
247-
assert(result.resultValueType == ResultValueType.BigDecimalValue)
247+
assert(result.resultValueType == ResultValueType.LongValue)
248248
}
249249
}

‎agent/src/test/scala/za/co/absa/atum/agent/model/MeasureUnitTests.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,13 @@ class MeasureUnitTests extends AnyFlatSpec with Matchers with SparkTestBase { se
127127
assert(dfFullSalarySumResult.resultValue == "2987144")
128128
assert(dfFullSalarySumResult.resultValueType == ResultValueType.BigDecimalValue)
129129
assert(dfExtraPersonSalarySumTruncResult.resultValue == "2989144")
130-
assert(dfExtraPersonSalarySumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
130+
assert(dfExtraPersonSalarySumTruncResult.resultValueType == ResultValueType.LongValue)
131131
assert(dfFullSalarySumTruncResult.resultValue == "2987144")
132-
assert(dfFullSalarySumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
132+
assert(dfFullSalarySumTruncResult.resultValueType == ResultValueType.LongValue)
133133
assert(dfExtraPersonSalaryAbsSumTruncResult.resultValue == "2991144")
134-
assert(dfExtraPersonSalaryAbsSumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
134+
assert(dfExtraPersonSalaryAbsSumTruncResult.resultValueType == ResultValueType.LongValue)
135135
assert(dfFullSalaryAbsSumTruncResult.resultValue == "2987144")
136-
assert(dfFullSalaryAbsSumTruncResult.resultValueType == ResultValueType.BigDecimalValue)
136+
assert(dfFullSalaryAbsSumTruncResult.resultValueType == ResultValueType.LongValue)
137137
}
138138

139139
}

0 commit comments

Comments
 (0)
Please sign in to comment.