Awesome
From jakeswenson
This repo is a copy from jakeswenson's repo and updated to support nushell v0.60+ by @flying-sheep. See the original here https://github.com/jakeswenson/nu_plugin_from_parquet. Asked permission to fork, update, and add license here https://github.com/jakeswenson/nu_plugin_from_parquet/issues/4
nu_plugin_parquet
This is a nushell plugin to add parquet compatibility with nu
structured types. It can read parquet files to nu
tables, or write tables to parquet files.
Installing
To add the plugin permanently, just install it and call plugin add
on it:
Using Cargo
cargo install --path .
plugin add ~/.cargo/bin/nu_plugin_parquet
plugin use ~/.cargo/bin/nu_plugin_parquet # required if you don't want to quit out and restart nushell
Usage
Reading
open -r sample.parquet | from parquet | first 10
or
open sample.parquet | first 10
╭───┬───────────────┬────┬────────────┬───────────┬──────────────┬────────┬──────────────┬──────────────┬──────────────┬────────────┬───────────┬──────────────┬──────────╮
│ # │ registration… │ id │ first_name │ last_name │ email │ gender │ ip_address │ cc │ country │ birthdate │ salary │ title │ comments │
├───┼───────────────┼────┼────────────┼───────────┼──────────────┼────────┼──────────────┼──────────────┼──────────────┼────────────┼───────────┼──────────────┼──────────┤
│ 0 │ 6 years ago │ 1 │ Amanda │ Jordan │ ajordan0@co… │ Female │ 1.197.201.2 │ 67595218649… │ Indonesia │ 3/8/1971 │ 49756.53 │ Internal Au… │ 1E+02 │
│ 1 │ 6 years ago │ 2 │ Albert │ Freeman │ afreeman1@i… │ Male │ 218.111.175… │ │ Canada │ 1/16/1968 │ 150280.17 │ Accountant … │ │
│ 2 │ 6 years ago │ 3 │ Evelyn │ Morgan │ emorgan2@al… │ Female │ 7.161.136.94 │ 67671190719… │ Russia │ 2/1/1960 │ 144972.51 │ Structural … │ │
│ 3 │ 6 years ago │ 4 │ Denise │ Riley │ driley3@gmp… │ Female │ 140.35.109.… │ 35760315989… │ China │ 4/8/1997 │ 90263.05 │ Senior Cost… │ │
│ 4 │ 6 years ago │ 5 │ Carlos │ Burns │ cburns4@mii… │ │ 169.113.235… │ 56022562552… │ South Africa │ │ │ │ │
│ 5 │ 6 years ago │ 6 │ Kathryn │ White │ kwhite5@goo… │ Female │ 195.131.81.… │ 35831363260… │ Indonesia │ 2/25/1983 │ 69227.11 │ Account Exe… │ │
│ 6 │ 6 years ago │ 7 │ Samuel │ Holmes │ sholmes6@fo… │ Male │ 232.234.81.… │ 35826413669… │ Portugal │ 12/18/1987 │ 14247.62 │ Senior Fina… │ │
│ 7 │ 6 years ago │ 8 │ Harry │ Howell │ hhowell7@ee… │ Male │ 91.235.51.73 │ │ Bosnia and … │ 3/1/1962 │ 186469.43 │ Web Develop… │ │
│ 8 │ 6 years ago │ 9 │ Jose │ Foster │ jfoster8@ye… │ Male │ 132.31.53.61 │ │ South Korea │ 3/27/1992 │ 231067.84 │ Software Te… │ 1E+02 │
│ 9 │ 6 years ago │ 10 │ Emily │ Stewart │ estewart9@o… │ Female │ 143.28.251.… │ 35742541103… │ Nigeria │ 1/28/1997 │ 27234.28 │ Health Coac… │ │
├───┼───────────────┼────┼────────────┼───────────┼──────────────┼────────┼──────────────┼──────────────┼──────────────┼────────────┼───────────┼──────────────┼──────────┤
│ # │ registration… │ id │ first_name │ last_name │ email │ gender │ ip_address │ cc │ country │ birthdate │ salary │ title │ comments │
╰───┴───────────────┴────┴────────────┴───────────┴──────────────┴────────┴──────────────┴──────────────┴──────────────┴────────────┴───────────┴──────────────┴──────────╯
Displaying Metadata
Display metadata, instead of data, from the parquet file by passing the --metadata, -m
flag to from parquet
:
open -r sample.parquet | from parquet --metadata | table -e
╭────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ version │ 1 │
│ creator │ parquet-mr version 1.8.1 (build 4aba4dae7bb0d4edbcf7923ae1339f28fd3f7fcf) │
│ num_rows │ 1000 │
│ key_values │ [list 0 items] │
│ │ ╭─────────────┬───────────────────────────────────────────────────────────────────────────────────╮ │
│ schema │ │ name │ hive_schema │ │
│ │ │ num_columns │ 13 │ │
│ │ │ │ ╭────┬───────────────────┬────────────┬────────────┬─────────────┬──────────────╮ │ │
│ │ │ schema │ │ # │ name │ repetition │ type │ type_length │ logical_type │ │ │
│ │ │ │ ├────┼───────────────────┼────────────┼────────────┼─────────────┼──────────────┤ │ │
│ │ │ │ │ 0 │ registration_dttm │ OPTIONAL │ INT96 │ │ │ │ │
│ │ │ │ │ 1 │ id │ OPTIONAL │ INT32 │ │ │ │ │
│ │ │ │ │ 2 │ first_name │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 3 │ last_name │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 4 │ email │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 5 │ gender │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 6 │ ip_address │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 7 │ cc │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 8 │ country │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 9 │ birthdate │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 10 │ salary │ OPTIONAL │ DOUBLE │ │ │ │ │
│ │ │ │ │ 11 │ title │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ │ 12 │ comments │ OPTIONAL │ BYTE_ARRAY │ -1 │ UTF8 │ │ │
│ │ │ │ ╰────┴───────────────────┴────────────┴────────────┴─────────────┴──────────────╯ │ │
│ │ ╰─────────────┴───────────────────────────────────────────────────────────────────────────────────╯ │
│ │ ╭───┬──────────┬─────────────────╮ │
│ row_groups │ │ # │ num_rows │ total_byte_size │ │
│ │ ├───┼──────────┼─────────────────┤ │
│ │ │ 0 │ 1000 │ 112492 │ │
│ │ ╰───┴──────────┴─────────────────╯ │
╰────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────╯
Writing
[{a:1, b:3}, {a: 2, b:4}] | save example.parquet
Or, to save all running processes:
ps | save example.parquet