Skip to content

[WIP] ARROW-22: Add schema adapter routines for converting Parquet schema metadata to in-memory Arrow schemas - #38

Closed
xhochy wants to merge 3 commits into
apache:masterfrom
xhochy:arrow-22
Closed

[WIP] ARROW-22: Add schema adapter routines for converting Parquet schema metadata to in-memory Arrow schemas#38
xhochy wants to merge 3 commits into
apache:masterfrom
xhochy:arrow-22

Conversation

@xhochy

Copy link
Copy Markdown
Member

Yet only conversion for primitive types. Logical types that can be converted to Arrow objects need to be done.

cc @wesm

@wesm

wesm commented Mar 25, 2016

Copy link
Copy Markdown
Member

This looks like a good start. I'll pick up the patch when I get to this later today and tomorrow -- let me know if you plan to work on it further in the next 48-72 hrs so we can coordinate. thanks!

@xhochy
xhochy deleted the arrow-22 branch March 7, 2017 16:16
wesm added a commit to wesm/arrow that referenced this pull request Sep 8, 2018
…-schema utility
Several inter-related things here:
* Added SchemaDescriptor and ColumnDescriptor types to hold computed structure
information (e.g. max ref/def levels) about the file schema. These are used
now in the FileReader and ColumnReader
* I also added, very similar to parquet-mr (though leaned down), a logical
schema node class structure which can be used for both the file reading and
writing.
* Added FlatSchemaConverter to convert Parquet flat schema metadata into a
nested logical schema
* Added a SchemaPrinter tool and parquet-dump-schema CLI tool to visit a nested
schema and print it to the console.
* Another big thing here is that per PARQUET-446 and related work in
parquet-mr, it's important for both the public API of this project and
internal development to limit our coupling to the compiled Thrift headers. I
added `Type`, `Repetition`, and `LogicalType` enums to the `parquet_cpp`
namespace and inverted the dependency between the column readers, scanners,
and encoders to use these enums.
* A bunch of unit tests.
Author: Wes McKinney <wes@cloudera.com>
Closesapache#38 from wesm/PARQUET-442 and squashes the following commits:
9ca0219 [Wes McKinney] Add a unit test for SchemaPrinter
fdd37cd [Wes McKinney] Comment re: FLBA node ctor
3a15c0c [Wes McKinney] Add some SchemaDescriptor and ColumnDescriptor tests
27e1805 [Wes McKinney] Don't squash supplied CMAKE_CXX_FLAGS
76dd283 [Wes McKinney] Refactor Make* methods as static member functions
2fae8cd [Wes McKinney] Trim some includes
b2e2661 [Wes McKinney] More doc about the parquet_cpp enums
bd78d7c [Wes McKinney] Move metadata enums to parquet/types.h and add rest of parquet:: enums. Add NONE value to Compression
415305b [Wes McKinney] cpplint
4ac84aa [Wes McKinney] Refactor to make PrimitiveNode and GroupNode ctors private. Add MakePrimitive and MakeGroup factory functions. Move parquet::SchemaElement function into static FromParquet ctors so can set private members
3169b24 [Wes McKinney] NewPrimitive should set num_children = 0 always
954658e [Wes McKinney] Add a comment for TestSchemaConverter.InvalidRoot and uncomment tests for root nodes of other repetition types
55d21b0 [Wes McKinney] Remove schema-builder-test.cc
71c1eab [Wes McKinney] Remove crufty builder.h, will revisit
7ef2dee [Wes McKinney] Fix list encoding comment
8c5af4e [Wes McKinney] Remove old comment, unneeded cast
6b041c5 [Wes McKinney] First draft SchemaDescriptor::Init. Refactor to use ColumnDescriptor. Standardize on parquet_cpp enums instead of Thrift metadata structs. Limit #include from Thrift
841ae7f [Wes McKinney] Don't export SchemaPrinter for now
834389a [Wes McKinney] Add Node::Visotor API and implement a simple schema dump CLI tool
a8bf5c8 [Wes McKinney] Catch and throw exception (instead of core dump) if run out of schema children. Add a Node::Visitor abstract API
bde8b18 [Wes McKinney] Can compare FLBA type metadata in logical schemas
f0df0ba [Wes McKinney] Finish a nested schema conversion test
0af0161 [Wes McKinney] Check that root schema node is repeated
5df00aa [Wes McKinney] Expose GroupConverter API, add test for invalid root
beaa99f [Wes McKinney] Refactor slightly and add an FLBA test
6e248b8 [Wes McKinney] Schema tree conversion first cut, add a couple primitive tests
9685c90 [Wes McKinney] Rename Schema -> RootSchema and add another unit test
f7d0487 [Wes McKinney] Schema types test coverage, move more methods into compilation unit
d746352 [Wes McKinney] Better isolate thrift dependency. Move schema/column descriptor into its own header
a8e5a0a [Wes McKinney] Tweaks
fb9d7ad [Wes McKinney] Draft of flat to nested schema conversion. No tests yet
3015063 [Wes McKinney] More prototyping. Rename Type -> Node. PrimitiveNode factory functions
a8a7a01 [Wes McKinney] Start drafting schema types
Change-Id: I484f0a6f02d17d3905f2a40e3b0f17a01554a413
kou pushed a commit that referenced this pull request May 10, 2020
This PR enables tests for `ARROW_COMPUTE`, `ARROW_DATASET`, `ARROW_FILESYSTEM`, `ARROW_HDFS`, `ARROW_ORC`, and `ARROW_IPC` (default on). #7131 enabled a minimal set of tests as a starting point.
I confirmed that these tests pass locally with the current master. In the current TravisCI environment, we cannot see this result due to a lot of error messages in `arrow-utility-test`.
```
$ git log | head -1
commit ed5f534
% ctest
...
Start 1: arrow-array-test
1/51 Test #1: arrow-array-test ..................... Passed 4.62 sec
Start 2: arrow-buffer-test
2/51 Test #2: arrow-buffer-test .................... Passed 0.14 sec
Start 3: arrow-extension-type-test
3/51 Test #3: arrow-extension-type-test ............ Passed 0.12 sec
Start 4: arrow-misc-test
4/51 Test #4: arrow-misc-test ...................... Passed 0.14 sec
Start 5: arrow-public-api-test
5/51 Test #5: arrow-public-api-test ................ Passed 0.12 sec
Start 6: arrow-scalar-test
6/51 Test #6: arrow-scalar-test .................... Passed 0.13 sec
Start 7: arrow-type-test
7/51 Test #7: arrow-type-test ...................... Passed 0.14 sec
Start 8: arrow-table-test
8/51 Test #8: arrow-table-test ..................... Passed 0.13 sec
Start 9: arrow-tensor-test
9/51 Test #9: arrow-tensor-test .................... Passed 0.13 sec
Start 10: arrow-sparse-tensor-test
10/51 Test #10: arrow-sparse-tensor-test ............. Passed 0.16 sec
Start 11: arrow-stl-test
11/51 Test #11: arrow-stl-test ....................... Passed 0.12 sec
Start 12: arrow-concatenate-test
12/51 Test #12: arrow-concatenate-test ............... Passed 0.53 sec
Start 13: arrow-diff-test
13/51 Test #13: arrow-diff-test ...................... Passed 1.45 sec
Start 14: arrow-c-bridge-test
14/51 Test #14: arrow-c-bridge-test .................. Passed 0.18 sec
Start 15: arrow-io-buffered-test
15/51 Test #15: arrow-io-buffered-test ............... Passed 0.20 sec
Start 16: arrow-io-compressed-test
16/51 Test #16: arrow-io-compressed-test ............. Passed 3.48 sec
Start 17: arrow-io-file-test
17/51 Test #17: arrow-io-file-test ................... Passed 0.74 sec
Start 18: arrow-io-hdfs-test
18/51 Test #18: arrow-io-hdfs-test ................... Passed 0.12 sec
Start 19: arrow-io-memory-test
19/51 Test #19: arrow-io-memory-test ................. Passed 2.77 sec
Start 20: arrow-utility-test
20/51 Test #20: arrow-utility-test ...................***Failed 5.65 sec
Start 21: arrow-threading-utility-test
21/51 Test #21: arrow-threading-utility-test ......... Passed 1.34 sec
Start 22: arrow-compute-compute-test
22/51 Test #22: arrow-compute-compute-test ........... Passed 0.13 sec
Start 23: arrow-compute-boolean-test
23/51 Test #23: arrow-compute-boolean-test ........... Passed 0.15 sec
Start 24: arrow-compute-cast-test
24/51 Test #24: arrow-compute-cast-test .............. Passed 0.22 sec
Start 25: arrow-compute-hash-test
25/51 Test #25: arrow-compute-hash-test .............. Passed 2.61 sec
Start 26: arrow-compute-isin-test
26/51 Test #26: arrow-compute-isin-test .............. Passed 0.81 sec
Start 27: arrow-compute-match-test
27/51 Test #27: arrow-compute-match-test ............. Passed 0.40 sec
Start 28: arrow-compute-sort-to-indices-test
28/51 Test #28: arrow-compute-sort-to-indices-test ... Passed 3.33 sec
Start 29: arrow-compute-nth-to-indices-test
29/51 Test #29: arrow-compute-nth-to-indices-test .... Passed 1.51 sec
Start 30: arrow-compute-util-internal-test
30/51 Test #30: arrow-compute-util-internal-test ..... Passed 0.13 sec
Start 31: arrow-compute-add-test
31/51 Test #31: arrow-compute-add-test ............... Passed 0.12 sec
Start 32: arrow-compute-aggregate-test
32/51 Test #32: arrow-compute-aggregate-test ......... Passed 14.70 sec
Start 33: arrow-compute-compare-test
33/51 Test #33: arrow-compute-compare-test ........... Passed 7.96 sec
Start 34: arrow-compute-take-test
34/51 Test #34: arrow-compute-take-test .............. Passed 4.80 sec
Start 35: arrow-compute-filter-test
35/51 Test #35: arrow-compute-filter-test ............ Passed 8.23 sec
Start 36: arrow-dataset-dataset-test
36/51 Test #36: arrow-dataset-dataset-test ........... Passed 0.25 sec
Start 37: arrow-dataset-discovery-test
37/51 Test #37: arrow-dataset-discovery-test ......... Passed 0.13 sec
Start 38: arrow-dataset-file-ipc-test
38/51 Test #38: arrow-dataset-file-ipc-test .......... Passed 0.21 sec
Start 39: arrow-dataset-file-test
39/51 Test #39: arrow-dataset-file-test .............. Passed 0.12 sec
Start 40: arrow-dataset-filter-test
40/51 Test #40: arrow-dataset-filter-test ............ Passed 0.16 sec
Start 41: arrow-dataset-partition-test
41/51 Test #41: arrow-dataset-partition-test ......... Passed 0.13 sec
Start 42: arrow-dataset-scanner-test
42/51 Test #42: arrow-dataset-scanner-test ........... Passed 0.20 sec
Start 43: arrow-filesystem-test
43/51 Test #43: arrow-filesystem-test ................ Passed 1.62 sec
Start 44: arrow-hdfs-test
44/51 Test #44: arrow-hdfs-test ...................... Passed 0.13 sec
Start 45: arrow-feather-test
45/51 Test #45: arrow-feather-test ................... Passed 0.91 sec
Start 46: arrow-ipc-read-write-test
46/51 Test #46: arrow-ipc-read-write-test ............ Passed 5.77 sec
Start 47: arrow-ipc-json-simple-test
47/51 Test #47: arrow-ipc-json-simple-test ........... Passed 0.16 sec
Start 48: arrow-ipc-json-test
48/51 Test #48: arrow-ipc-json-test .................. Passed 0.27 sec
Start 49: arrow-json-integration-test
49/51 Test #49: arrow-json-integration-test .......... Passed 0.13 sec
Start 50: arrow-json-test
50/51 Test #50: arrow-json-test ...................... Passed 0.26 sec
Start 51: arrow-orc-adapter-test
51/51 Test #51: arrow-orc-adapter-test ............... Passed 1.92 sec
98% tests passed, 1 tests failed out of 51
Label Time Summary:
arrow-tests = 27.38 sec (27 tests)
arrow_compute = 45.11 sec (14 tests)
arrow_dataset = 1.21 sec (7 tests)
arrow_ipc = 6.20 sec (3 tests)
unittest = 79.91 sec (51 tests)
Total Test time (real) = 79.99 sec
The following tests FAILED:
20 - arrow-utility-test (Failed)
Errors while running CTest
```
Closes#7142 from kiszk/ARROW-8754
Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zhztheplayer pushed a commit to zhztheplayer/arrow-1 that referenced this pull request Nov 9, 2021
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 20, 2026
- Remove duplicate physical_schema_mutex_ declaration from OrcFileFragment
- The mutex is inherited from Fragment base class (util::Mutex)
- Fix all lock usages to use Lock() method instead of std::lock_guard
- ORC code was incorrectly declaring std::mutex, shadowing base class member
- Now matches Parquet's thread safety pattern exactly
Verified: All 10 mutex usages now use 'auto lock = physical_schema_mutex_.Lock()'
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
cbb330 added a commit to cbb330/arrow that referenced this pull request Feb 24, 2026
- Remove duplicate physical_schema_mutex_ declaration from OrcFileFragment
- The mutex is inherited from Fragment base class (util::Mutex)
- Fix all lock usages to use Lock() method instead of std::lock_guard
- ORC code was incorrectly declaring std::mutex, shadowing base class member
- Now matches Parquet's thread safety pattern exactly
Verified: All 10 mutex usages now use 'auto lock = physical_schema_mutex_.Lock()'
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@xhochy@wesm