{"action":"created","issue":{"url":"https://api.github.com/repos/apache/parquet-cpp/issues/38","repository_url":"https://api.github.com/repos/apache/parquet-cpp","labels_url":"https://api.github.com/repos/apache/parquet-cpp/issues/38/labels{/name}","comments_url":"https://api.github.com/repos/apache/parquet-cpp/issues/38/comments","events_url":"https://api.github.com/repos/apache/parquet-cpp/issues/38/events","html_url":"https://github.com/apache/parquet-cpp/pull/38","id":131251906,"number":38,"title":"PARQUET-442: Nested schema conversion, Thrift struct decoupling, dump-schema utility","user":{"login":"wesm","id":329591,"avatar_url":"https://avatars.githubusercontent.com/u/329591?v=3","gravatar_id":"","url":"https://api.github.com/users/wesm","html_url":"https://github.com/wesm","followers_url":"https://api.github.com/users/wesm/followers","following_url":"https://api.github.com/users/wesm/following{/other_user}","gists_url":"https://api.github.com/users/wesm/gists{/gist_id}","starred_url":"https://api.github.com/users/wesm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wesm/subscriptions","organizations_url":"https://api.github.com/users/wesm/orgs","repos_url":"https://api.github.com/users/wesm/repos","events_url":"https://api.github.com/users/wesm/events{/privacy}","received_events_url":"https://api.github.com/users/wesm/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2016-02-04T05:52:01Z","updated_at":"2016-02-05T21:06:44Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/apache/parquet-cpp/pulls/38","html_url":"https://github.com/apache/parquet-cpp/pull/38","diff_url":"https://github.com/apache/parquet-cpp/pull/38.diff","patch_url":"https://github.com/apache/parquet-cpp/pull/38.patch"},"body":"Several inter-related things here:\r\n\r\n* Added SchemaDescriptor and ColumnDescriptor types to hold computed structure\r\n  information (e.g. max ref/def levels) about the file schema. These are used\r\n  now in the FileReader and ColumnReader\r\n* I also added, very similar to parquet-mr (though leaned down), a logical\r\n  schema node class structure which can be used for both the file reading and\r\n  writing.\r\n* Added FlatSchemaConverter to convert Parquet flat schema metadata into a\r\n  nested logical schema\r\n* Added a SchemaPrinter tool and parquet-dump-schema CLI tool to visit a nested\r\n  schema and print it to the console.\r\n* Another big thing here is that per PARQUET-446 and related work in\r\n  parquet-mr, it's important for both the public API of this project and\r\n  internal development to limit our coupling to the compiled Thrift headers. I\r\n  added `Type`, `Repetition`, and `LogicalType` enums to the `parquet_cpp`\r\n  namespace and inverted the dependency between the column readers, scanners,\r\n  and encoders to use these enums.\r\n* A bunch of unit tests."},"comment":{"url":"https://api.github.com/repos/apache/parquet-cpp/issues/comments/180554080","html_url":"https://github.com/apache/parquet-cpp/pull/38#issuecomment-180554080","issue_url":"https://api.github.com/repos/apache/parquet-cpp/issues/38","id":180554080,"user":{"login":"wesm","id":329591,"avatar_url":"https://avatars.githubusercontent.com/u/329591?v=3","gravatar_id":"","url":"https://api.github.com/users/wesm","html_url":"https://github.com/wesm","followers_url":"https://api.github.com/users/wesm/followers","following_url":"https://api.github.com/users/wesm/following{/other_user}","gists_url":"https://api.github.com/users/wesm/gists{/gist_id}","starred_url":"https://api.github.com/users/wesm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wesm/subscriptions","organizations_url":"https://api.github.com/users/wesm/orgs","repos_url":"https://api.github.com/users/wesm/repos","events_url":"https://api.github.com/users/wesm/events{/privacy}","received_events_url":"https://api.github.com/users/wesm/received_events","type":"User","site_admin":false},"created_at":"2016-02-05T21:06:44Z","updated_at":"2016-02-05T21:06:44Z","body":"I'd really like @nongli or @skye to take a look if possible, so no need to rush if they don't have time until next week"}}