@@ -936,6 +936,44 @@ TEST_P(AvroWriterTest, MultipleAvroBlocks) {
936936 }
937937}
938938
939+ TEST_P (AvroWriterTest, Metrics) {
940+ auto schema = std::make_shared<iceberg::Schema>(std::vector<SchemaField>{
941+ SchemaField::MakeRequired (1 , " id" , std::make_shared<IntType>()),
942+ SchemaField::MakeOptional (2 , " name" , std::make_shared<StringType>())});
943+
944+ std::string test_data = R"( [[1, "Alice"], [2, "Bob"], [3, "Charlie"]])" ;
945+
946+ // Write data but don't close yet
947+ ArrowSchema arrow_c_schema;
948+ ASSERT_THAT (ToArrowSchema (*schema, &arrow_c_schema), IsOk ());
949+ auto arrow_schema = ::arrow::ImportType (&arrow_c_schema).ValueOrDie ();
950+ auto array = ::arrow::json::ArrayFromJSONString (arrow_schema, test_data).ValueOrDie ();
951+ struct ArrowArray arrow_array;
952+ ASSERT_TRUE (::arrow::ExportArray (*array, &arrow_array).ok ());
953+
954+ ICEBERG_UNWRAP_OR_FAIL (
955+ writer_,
956+ WriterFactoryRegistry::Open (
957+ FileFormatType::kAvro ,
958+ {.path = temp_avro_file_, .schema = schema, .io = file_io_, .properties = {}}));
959+ ASSERT_THAT (writer_->Write (&arrow_array), IsOk ());
960+
961+ // Metrics should fail before close
962+ ASSERT_THAT (writer_->metrics (), IsError (ErrorKind::kInvalid ));
963+
964+ // After close, metrics should succeed
965+ ASSERT_THAT (writer_->Close (), IsOk ());
966+ ICEBERG_UNWRAP_OR_FAIL (auto metrics, writer_->metrics ());
967+ ASSERT_TRUE (metrics.row_count .has_value ());
968+ EXPECT_EQ (metrics.row_count .value (), 3 );
969+ EXPECT_TRUE (metrics.column_sizes .empty ());
970+ EXPECT_TRUE (metrics.value_counts .empty ());
971+ EXPECT_TRUE (metrics.null_value_counts .empty ());
972+ EXPECT_TRUE (metrics.nan_value_counts .empty ());
973+ EXPECT_TRUE (metrics.lower_bounds .empty ());
974+ EXPECT_TRUE (metrics.upper_bounds .empty ());
975+ }
976+
939977// Instantiate parameterized tests for both direct encoder and GenericDatum paths
940978INSTANTIATE_TEST_SUITE_P (DirectEncoderModes, AvroWriterTest,
941979 ::testing::Values (true , false ),
0 commit comments