|
23 | 23 | import static org.apache.spark.sql.connector.write.RowLevelOperation.Command.UPDATE;
|
24 | 24 |
|
25 | 25 | import java.util.Arrays;
|
| 26 | +import java.util.List; |
26 | 27 | import org.apache.iceberg.DistributionMode;
|
27 | 28 | import org.apache.iceberg.MetadataColumns;
|
28 | 29 | import org.apache.iceberg.Table;
|
| 30 | +import org.apache.iceberg.metrics.CommitMetricsResult; |
| 31 | +import org.apache.iceberg.metrics.CommitReport; |
| 32 | +import org.apache.iceberg.metrics.CounterResult; |
| 33 | +import org.apache.iceberg.metrics.InMemoryMetricsReporter; |
| 34 | +import org.apache.iceberg.relocated.com.google.common.collect.Lists; |
29 | 35 | import org.apache.iceberg.relocated.com.google.common.collect.ObjectArrays;
|
| 36 | +import org.apache.iceberg.spark.source.metrics.AddedDataFiles; |
| 37 | +import org.apache.iceberg.spark.source.metrics.AddedDeleteFiles; |
| 38 | +import org.apache.iceberg.spark.source.metrics.AddedEqualityDeleteFiles; |
| 39 | +import org.apache.iceberg.spark.source.metrics.AddedEqualityDeletes; |
| 40 | +import org.apache.iceberg.spark.source.metrics.AddedFileSizeInBytes; |
| 41 | +import org.apache.iceberg.spark.source.metrics.AddedPositionalDeleteFiles; |
| 42 | +import org.apache.iceberg.spark.source.metrics.AddedPositionalDeletes; |
| 43 | +import org.apache.iceberg.spark.source.metrics.AddedRecords; |
| 44 | +import org.apache.iceberg.spark.source.metrics.RemovedDataFiles; |
| 45 | +import org.apache.iceberg.spark.source.metrics.RemovedDeleteFiles; |
| 46 | +import org.apache.iceberg.spark.source.metrics.RemovedEqualityDeleteFiles; |
| 47 | +import org.apache.iceberg.spark.source.metrics.RemovedEqualityDeletes; |
| 48 | +import org.apache.iceberg.spark.source.metrics.RemovedFileSizeInBytes; |
| 49 | +import org.apache.iceberg.spark.source.metrics.RemovedPositionalDeleteFiles; |
| 50 | +import org.apache.iceberg.spark.source.metrics.RemovedPositionalDeletes; |
| 51 | +import org.apache.iceberg.spark.source.metrics.RemovedRecords; |
| 52 | +import org.apache.iceberg.spark.source.metrics.TotalDataFiles; |
| 53 | +import org.apache.iceberg.spark.source.metrics.TotalDeleteFiles; |
| 54 | +import org.apache.iceberg.spark.source.metrics.TotalEqualityDeletes; |
| 55 | +import org.apache.iceberg.spark.source.metrics.TotalFileSizeInBytes; |
| 56 | +import org.apache.iceberg.spark.source.metrics.TotalPositionalDeletes; |
| 57 | +import org.apache.iceberg.spark.source.metrics.TotalRecords; |
30 | 58 | import org.apache.iceberg.types.Types;
|
31 | 59 | import org.apache.iceberg.util.SortOrderUtil;
|
32 | 60 | import org.apache.spark.sql.connector.distributions.Distribution;
|
|
36 | 64 | import org.apache.spark.sql.connector.expressions.NamedReference;
|
37 | 65 | import org.apache.spark.sql.connector.expressions.SortDirection;
|
38 | 66 | import org.apache.spark.sql.connector.expressions.SortOrder;
|
| 67 | +import org.apache.spark.sql.connector.metric.CustomMetric; |
| 68 | +import org.apache.spark.sql.connector.metric.CustomTaskMetric; |
39 | 69 | import org.apache.spark.sql.connector.write.RowLevelOperation.Command;
|
40 | 70 |
|
41 | 71 | /**
|
@@ -256,4 +286,101 @@ private static SortOrder[] orderBy(Expression... exprs) {
|
256 | 286 | private static SortOrder sort(Expression expr) {
|
257 | 287 | return Expressions.sort(expr, SortDirection.ASCENDING);
|
258 | 288 | }
|
| 289 | + |
| 290 | + public static CustomMetric[] supportedCustomMetrics() { |
| 291 | + return new CustomMetric[] { |
| 292 | + new AddedDataFiles(), |
| 293 | + new AddedDeleteFiles(), |
| 294 | + new AddedEqualityDeletes(), |
| 295 | + new AddedEqualityDeleteFiles(), |
| 296 | + new AddedFileSizeInBytes(), |
| 297 | + new AddedPositionalDeletes(), |
| 298 | + new AddedPositionalDeleteFiles(), |
| 299 | + new AddedRecords(), |
| 300 | + new RemovedDataFiles(), |
| 301 | + new RemovedDeleteFiles(), |
| 302 | + new RemovedRecords(), |
| 303 | + new RemovedEqualityDeleteFiles(), |
| 304 | + new RemovedEqualityDeletes(), |
| 305 | + new RemovedFileSizeInBytes(), |
| 306 | + new RemovedPositionalDeleteFiles(), |
| 307 | + new RemovedPositionalDeletes(), |
| 308 | + new TotalDataFiles(), |
| 309 | + new TotalDeleteFiles(), |
| 310 | + new TotalEqualityDeletes(), |
| 311 | + new TotalFileSizeInBytes(), |
| 312 | + new TotalPositionalDeletes(), |
| 313 | + new TotalRecords() |
| 314 | + }; |
| 315 | + } |
| 316 | + |
| 317 | + public static CustomTaskMetric[] customTaskMetrics(InMemoryMetricsReporter metricsReporter) { |
| 318 | + List<CustomTaskMetric> taskMetrics = Lists.newArrayList(); |
| 319 | + if (metricsReporter != null) { |
| 320 | + CommitReport commitReport = metricsReporter.commitReport(); |
| 321 | + if (commitReport != null) { |
| 322 | + CommitMetricsResult metricsResult = commitReport.commitMetrics(); |
| 323 | + addMetricValue(new AddedDataFiles(), metricsResult.addedDataFiles(), taskMetrics); |
| 324 | + addMetricValue(new AddedDeleteFiles(), metricsResult.addedDeleteFiles(), taskMetrics); |
| 325 | + addMetricValue( |
| 326 | + new AddedEqualityDeletes(), metricsResult.addedEqualityDeletes(), taskMetrics); |
| 327 | + addMetricValue( |
| 328 | + new AddedEqualityDeleteFiles(), metricsResult.addedEqualityDeleteFiles(), taskMetrics); |
| 329 | + addMetricValue( |
| 330 | + new AddedFileSizeInBytes(), metricsResult.addedFilesSizeInBytes(), taskMetrics); |
| 331 | + addMetricValue( |
| 332 | + new AddedPositionalDeletes(), metricsResult.addedPositionalDeletes(), taskMetrics); |
| 333 | + addMetricValue( |
| 334 | + new AddedPositionalDeleteFiles(), |
| 335 | + metricsResult.addedPositionalDeleteFiles(), |
| 336 | + taskMetrics); |
| 337 | + addMetricValue(new AddedRecords(), metricsResult.addedRecords(), taskMetrics); |
| 338 | + addMetricValue(new RemovedDataFiles(), metricsResult.removedDataFiles(), taskMetrics); |
| 339 | + addMetricValue(new RemovedDeleteFiles(), metricsResult.removedDeleteFiles(), taskMetrics); |
| 340 | + addMetricValue(new RemovedRecords(), metricsResult.removedRecords(), taskMetrics); |
| 341 | + addMetricValue( |
| 342 | + new RemovedEqualityDeleteFiles(), |
| 343 | + metricsResult.removedEqualityDeleteFiles(), |
| 344 | + taskMetrics); |
| 345 | + addMetricValue( |
| 346 | + new RemovedEqualityDeletes(), metricsResult.removedEqualityDeletes(), taskMetrics); |
| 347 | + addMetricValue( |
| 348 | + new RemovedFileSizeInBytes(), metricsResult.removedFilesSizeInBytes(), taskMetrics); |
| 349 | + addMetricValue( |
| 350 | + new RemovedPositionalDeleteFiles(), |
| 351 | + metricsResult.removedPositionalDeleteFiles(), |
| 352 | + taskMetrics); |
| 353 | + addMetricValue( |
| 354 | + new RemovedPositionalDeletes(), metricsResult.removedPositionalDeletes(), taskMetrics); |
| 355 | + addMetricValue(new TotalDataFiles(), metricsResult.totalDataFiles(), taskMetrics); |
| 356 | + addMetricValue(new TotalDeleteFiles(), metricsResult.totalDeleteFiles(), taskMetrics); |
| 357 | + addMetricValue( |
| 358 | + new TotalEqualityDeletes(), metricsResult.totalEqualityDeletes(), taskMetrics); |
| 359 | + addMetricValue( |
| 360 | + new TotalFileSizeInBytes(), metricsResult.totalFilesSizeInBytes(), taskMetrics); |
| 361 | + addMetricValue( |
| 362 | + new TotalPositionalDeletes(), metricsResult.totalPositionalDeletes(), taskMetrics); |
| 363 | + addMetricValue(new TotalRecords(), metricsResult.totalRecords(), taskMetrics); |
| 364 | + } |
| 365 | + } |
| 366 | + return taskMetrics.toArray(new CustomTaskMetric[0]); |
| 367 | + } |
| 368 | + |
| 369 | + private static void addMetricValue( |
| 370 | + CustomMetric metric, CounterResult result, List<CustomTaskMetric> taskMetrics) { |
| 371 | + if (result != null) { |
| 372 | + taskMetrics.add( |
| 373 | + new CustomTaskMetric() { |
| 374 | + @Override |
| 375 | + public String name() { |
| 376 | + return metric.name(); |
| 377 | + } |
| 378 | + |
| 379 | + @Override |
| 380 | + public long value() { |
| 381 | + return result.value(); |
| 382 | + } |
| 383 | + }); |
| 384 | + } |
| 385 | + } |
259 | 386 | }
|
0 commit comments