You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gluten.apache.org by "felipepessoto (via GitHub)" <gi...@apache.org> on 2025/03/14 04:43:27 UTC
Re: [PR] [GLUTEN-7110][VL][DELTA] support IncrementMetric in gluten [incubator-gluten]
felipepessoto commented on PR #7111:
URL: https://github.com/apache/incubator-gluten/pull/7111#issuecomment-2723466481
@dcoliversun, I think I found a bug with this change and FilterMetricsUpdater. The DeleteCommand query is:
data.filter(new Column(cond))
.select(input_file_name())
.filter(new Column(incrDeletedCountExpr))
.distinct()
.as[String]
.collect()
If you remove the `.select(input_file_name())`, and replace it by something like `.select(col("_metadata.file_path"))`, or `.select(org.apache.spark.sql.functions.lit("TEST"))` the FilterMetricsUpdater.updateNativeMetrics is not called with correct `operatorMetrics.outputRows`.
I guess some shortcut is taken when we don't have a UDF. But this shouldn't happen, since IncrementMetric is Nondeterministic. I'm not sure if this is the case though, Idk how to troubleshoot this.
I added some println:
```
class FilterMetricsUpdater(
val metrics: Map[String, SQLMetric],
val extraMetrics: Seq[(String, SQLMetric)])
extends MetricsUpdater {
override def updateNativeMetrics(opMetrics: IOperatorMetrics): Unit = {
println("FilterMetricsUpdater: 1")
if (opMetrics != null) {
println("FilterMetricsUpdater: 2")
val operatorMetrics = opMetrics.asInstanceOf[OperatorMetrics]
metrics("numOutputRows") += operatorMetrics.outputRows
metrics("outputVectors") += operatorMetrics.outputVectors
metrics("outputBytes") += operatorMetrics.outputBytes
metrics("cpuCount") += operatorMetrics.cpuCount
metrics("wallNanos") += operatorMetrics.wallNanos
metrics("peakMemoryBytes") += operatorMetrics.peakMemoryBytes
metrics("numMemoryAllocations") += operatorMetrics.numMemoryAllocations
println(s"FilterMetricsUpdater: 3. ${extraMetrics.size}. $extraMetrics")
extraMetrics.foreach {
case (name, metric) =>
name match {
case "increment_metric" =>
println(s"FilterMetricsUpdater: 4. ${operatorMetrics.outputRows}.")
metric += operatorMetrics.outputRows
case _ => // do nothing
}
}
}
}
}
```
This is what it shows for `.select(org.apache.spark.sql.functions.lit("TEST"))` or `.select(col("_metadata.file_path"))` and run `build/sbt 'spark/testOnly org.apache.spark.sql.delta.DescribeDeltaHistorySuite -- -t "operation metrics - delete"'`
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 1. List((increment_metric,SQLMetric(id: 2134, name: Some(number of rows deleted.), value: 0)))
FilterMetricsUpdater: 4. 0.
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 1. List((increment_metric,SQLMetric(id: 2134, name: Some(number of rows deleted.), value: 0)))
FilterMetricsUpdater: 4. 0.
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
This is when we use the input_file_name:
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 1. List((increment_metric,SQLMetric(id: 2134, name: Some(number of rows deleted.), value: 0)))
FilterMetricsUpdater: 4. 0.
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 1. List((increment_metric,SQLMetric(id: 2134, name: Some(number of rows deleted.), value: 0)))
FilterMetricsUpdater: 4. 1.
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 1. List((increment_metric,SQLMetric(id: 2134, name: Some(number of rows deleted.), value: 0)))
FilterMetricsUpdater: 4. 0.
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 1. List((increment_metric,SQLMetric(id: 2134, name: Some(number of rows deleted.), value: 0)))
FilterMetricsUpdater: 4. 0.
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 1. List((increment_metric,SQLMetric(id: 2150, name: Some(number of rows touched), value: 0)))
FilterMetricsUpdater: 4. 3.
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
FilterMetricsUpdater: 1
FilterMetricsUpdater: 2
FilterMetricsUpdater: 3. 0. List()
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@gluten.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@gluten.apache.org
For additional commands, e-mail: commits-help@gluten.apache.org