🌟

Mac に parquet cli をインストールして Apache Parquet の中身を確認する

2022/12/12に公開

IVRyのバックエンドエンジニアの島筒です。
https://twitter.com/kshimadutsu

最近、社内でdata rakeの構築が進んでいます。
data rakeはBigQueryで構築されており、IVRyのデータの一部が保存されているAWSのRDSからは、日次でファイルにエクスポートしS3を経由してBigQueryへ連携しています。
その際、作成されたファイルの拡張子がparquetで、そのファイルの中身を確認するツールとして、parquet cliをインストールしたのですが、インストール時に少し手間取ったので記録しておきます。

インストールの説明の前にparquet(正式名称Apache Parquet、フランス語で、パルケと読み、英語読みにするとパーケット)を超大雑把に説明すると、データを圧縮して保存してくれるファイルフォーマットで、data rakeの構築に使われることが多いです。

詳細については、こちらを読んでください。
https://parquet.apache.org/docs/

インストール for Mac

インストール手順の紹介はMacのみとなります。

brew install parquet-cli

parquet-tools をインストールする記事を見かけますが、以下の通り、deprecatedされています。

$ brew install parquet-tools
Error: parquet-tools has been disabled because it is deprecated upstream!

使い方

help

まずhelpを見ます

$ parquet --help

Usage: parquet [options] [command] [command options]

  Options:

    -v, --verbose, --debug
	Print extra debugging information

  Commands:

    help
	Retrieves details on the functions of other commands
    meta
	Print a Parquet file's metadata
    pages
	Print page summaries for a Parquet file
    dictionary
	Print dictionaries for a Parquet column
    check-stats
	Check Parquet files for corrupt page and column stats (PARQUET-251)
    schema
	Print the Avro schema for a file
    csv-schema
	Build a schema from a CSV data sample
    convert-csv
	Create a file from CSV data
    convert
	Create a Parquet file from a data file
    to-avro
	Create an Avro file from a data file
    cat
	Print the first N records from a file
    head
	Print the first N records from a file
    column-index
	Prints the column and offset indexes of a Parquet file
    column-size
	Print the column sizes of a parquet file
    prune
	Prune column(s) in a Parquet file and save it to a new file. The columns left are not changed.
    trans-compression
	Translate the compression from one to another (It doesn't support bloom filter feature yet).
    masking
	Replace columns with masked values and write to a new Parquet file
    footer
	Print the Parquet file footer in json format

  Examples:

    # print information for meta
    parquet help meta

  See 'parquet help <command>' for more information on a specific command.

スキーマ定義の確認

$ parquet schema part-00000-xxxxxxxx-1234-xxxx-5678-xxxx0000xxxx0000-c000.gz.parquet 
{
  "type" : "record",
  "name" : "users",
  "fields" : [ {
    "name" : "id",
    "type" : [ "null", "long" ],
    "default" : null
  }, {
    "name" : "name",
    "type" : [ "null", "string" ],
    "default" : null
  },
...省略

データの確認

head or catですが、catは全件出力なので、確実に中身の件数を理解している場合のみにしましょう。

先頭5行を表示

$ parquet head part-00000-xxxxxxxx-1234-xxxx-5678-xxxx0000xxxx0000-c000.gz.parquet
{"id": 1, "name": "Jonhy ...},
{"id": 2, "name": "Jonhy ...},

先頭10行を表示(helpに書いてないから困る)

$ parquet head -n 10 part-00000-xxxxxxxx-1234-xxxx-5678-xxxx0000xxxx0000-c000.gz.parquet

最後に会社紹介

壁のある会社です、遊びに来てください。
https://note.com/u16m/n/n3b31ede1065e

アドカレの1日目に、社長奥西によるIVRyの1年の軌跡が紹介されているので、読んでみてください!
https://note.com/ryogaskywalker/n/ncf882f7d0b68

絶賛、エンジニア募集中です。
https://ivry-jp.notion.site/IVRy-e1d47e4a79ba4f9d8a891fc938e02271

IVRyテックブログ

Discussion