MCPcopy Create free account
hub / github.com/apache/arrow / EnumerateStatistics

Function EnumerateStatistics

cpp/src/arrow/record_batch.cc:514–625  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

512using OnStatistics =
513 std::function<Status(const EnumeratedStatistics& enumerated_statistics)>;
514Status EnumerateStatistics(const RecordBatch& record_batch, OnStatistics on_statistics) {
515 EnumeratedStatistics statistics;
516 statistics.nth_statistics = 0;
517 statistics.start_new_column = true;
518 statistics.nth_column = std::nullopt;
519
520 statistics.key = ARROW_STATISTICS_KEY_ROW_COUNT_EXACT;
521 statistics.type = int64();
522 statistics.value = record_batch.num_rows();
523 RETURN_NOT_OK(on_statistics(statistics));
524 statistics.start_new_column = false;
525
526 const auto& schema = record_batch.schema();
527 const auto num_fields = schema->num_fields();
528 for (int nth_column = 0; nth_column < num_fields; ++nth_column) {
529 const auto& field = schema->field(nth_column);
530 auto column_statistics = record_batch.column(nth_column)->statistics();
531 if (!column_statistics) {
532 continue;
533 }
534
535 statistics.start_new_column = true;
536 statistics.nth_column = nth_column;
537 if (column_statistics->null_count.has_value()) {
538 statistics.nth_statistics++;
539 if (std::holds_alternative<int64_t>(column_statistics->null_count.value())) {
540 statistics.key = ARROW_STATISTICS_KEY_NULL_COUNT_EXACT;
541 statistics.type = int64();
542 statistics.value = std::get<int64_t>(column_statistics->null_count.value());
543 RETURN_NOT_OK(on_statistics(statistics));
544 } else {
545 statistics.key = ARROW_STATISTICS_KEY_NULL_COUNT_APPROXIMATE;
546 statistics.type = float64();
547 statistics.value = std::get<double>(column_statistics->null_count.value());
548 RETURN_NOT_OK(on_statistics(statistics));
549 }
550 statistics.start_new_column = false;
551 }
552
553 if (column_statistics->distinct_count.has_value()) {
554 statistics.nth_statistics++;
555 if (std::holds_alternative<int64_t>(column_statistics->distinct_count.value())) {
556 statistics.key = ARROW_STATISTICS_KEY_DISTINCT_COUNT_EXACT;
557 statistics.type = int64();
558 statistics.value = std::get<int64_t>(column_statistics->distinct_count.value());
559 } else {
560 statistics.key = ARROW_STATISTICS_KEY_DISTINCT_COUNT_APPROXIMATE;
561 statistics.type = float64();
562 statistics.value = std::get<double>(column_statistics->distinct_count.value());
563 }
564
565 RETURN_NOT_OK(on_statistics(statistics));
566 statistics.start_new_column = false;
567 }
568
569 if (column_statistics->max_byte_width.has_value()) {
570 statistics.nth_statistics++;
571 if (std::holds_alternative<int64_t>(column_statistics->max_byte_width.value())) {

Callers 1

MakeStatisticsArrayMethod · 0.85

Calls 9

OKFunction · 0.70
num_rowsMethod · 0.45
schemaMethod · 0.45
num_fieldsMethod · 0.45
fieldMethod · 0.45
statisticsMethod · 0.45
columnMethod · 0.45
valueMethod · 0.45
typeMethod · 0.45

Tested by

no test coverage detected