Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cpp/src/parquet/arrow/arrow-reader-writer-test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2686,6 +2686,11 @@ TEST_P(TestArrowReaderAdHocSparkAndHvr, ReadDecimals) {
std::shared_ptr<::arrow::Table> table;
ASSERT_OK_NO_THROW(arrow_reader->ReadTable(&table));

std::shared_ptr<::arrow::Schema> schema;
ASSERT_OK_NO_THROW(arrow_reader->GetSchema(&schema));
ASSERT_EQ(1, schema->num_fields());
ASSERT_TRUE(schema->field(0)->type()->Equals(*decimal_type));

ASSERT_EQ(1, table->num_columns());

constexpr int32_t expected_length = 24;
Expand Down
14 changes: 11 additions & 3 deletions cpp/src/parquet/arrow/reader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -485,9 +485,13 @@ Status FileReader::Impl::ReadColumn(int i, std::shared_ptr<ChunkedArray>* out) {

Status FileReader::Impl::GetSchema(const std::vector<int>& indices,
std::shared_ptr<::arrow::Schema>* out) {
auto descr = reader_->metadata()->schema();
auto parquet_key_value_metadata = reader_->metadata()->key_value_metadata();
return FromParquetSchema(descr, indices, parquet_key_value_metadata, out);
return FromParquetSchema(reader_->metadata()->schema(), indices,
reader_->metadata()->key_value_metadata(), out);
}

Status FileReader::Impl::GetSchema(std::shared_ptr<::arrow::Schema>* out) {
return FromParquetSchema(reader_->metadata()->schema(),
reader_->metadata()->key_value_metadata(), out);
}

Status FileReader::Impl::ReadColumnChunk(int column_index, int row_group_index,
Expand Down Expand Up @@ -739,6 +743,10 @@ Status FileReader::GetColumn(int i, std::unique_ptr<ColumnReader>* out) {
return impl_->GetColumn(i, iterator_factory, out);
}

Status FileReader::GetSchema(std::shared_ptr<::arrow::Schema>* out) {
return impl_->GetSchema(out);
}

Status FileReader::GetSchema(const std::vector<int>& indices,
std::shared_ptr<::arrow::Schema>* out) {
return impl_->GetSchema(indices, out);
Expand Down
3 changes: 3 additions & 0 deletions cpp/src/parquet/arrow/reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,9 @@ class PARQUET_EXPORT FileReader {
// Returns error status if the column of interest is not flat.
::arrow::Status GetColumn(int i, std::unique_ptr<ColumnReader>* out);

/// \brief Return arrow schema for all the columns.
::arrow::Status GetSchema(std::shared_ptr<::arrow::Schema>* out);

/// \brief Return arrow schema by apply selection of column indices.
/// \returns error status if passed wrong indices.
::arrow::Status GetSchema(const std::vector<int>& indices,
Expand Down