列指向のデータストレージ形式、Apache Parquetについてもう少しだけ詳しく調べてみた | そう備忘録

列指向のデータストレージ形式、Apache Parquetについてもう少しだけ詳しく調べてみた

Apache Parquet

CSVとの違い

以前のAWS Athenaの記事でCSVとParquetとのファイル形式の違いでSQL実行時のRun Timeとスキャンデータ量にどの程度違いが出るのかを検証した。

CSVで8MByte程のファイルサイズで特定の1列だけを取り出すようなSQLの場合、スキャンデータ量はParquetの方が明らかに少なかった。

AWS Athenaはスキャン量に応じて課金されるのでParquet形式のほうが有利という事になるので、もう少しParquetについて調べてみることにした。

Apache Parquetとは

Twitter社とCloudera社(米国のソフトウェア会社)で共同開発されたオープンソースの列指向のデータストレージ形式。

データ圧縮されているのでバイナリ形式なのでCSVファイルと比較すると視認性は落ちる、というかテキストエディターで開いてみても何が入っているのかは分からない。

列指向とは

例えばRDBMSは指定した”行”をSQLで取得するので行指向なのに対して、データ分析では特定の列の値を合算したり平均を計算したりと同一列に対して何らかの計算をすることが多いので列をまとめて取り出すのに優位な構造になっている。

また同一列であれば項目の属性も同じなので圧縮が効きやすいとのメリットもある。

CSVとの比較

CSVとParquetとでSQLの実行結果の比較をしてみた。

  • 項目数:23項目
  • 行数:371,203行
  • ファイルサイズ:107,320,858 Byte(CSV)、13,934,092 Byte(Parquet)

列の全行取り出し

実行SQL

select count_datetime from temp_humi_table

Run TimeはParquetの方が短い。

またCSVは例え列を指定していてもデータが行単位なのでスキャン量はファイル全体になるのに対してParquetは対象の列に対してのみスキャンをしているのでスキャン量がかなり抑えられる。

Run Time(実行時間)

CSV

3.47 seconds

Parquet

2.25 seconds

データスキャン量

CSV

102.35 MB

Parquet

2.69 MB

数値項目計算

where句は指定せずに数値項目の全行に対して計算を行う。

実行SQL

select avg(count_val) from temp_humi_table

Run TimeはParquetの方が短い。

またCSVはやはりファイル全体に対してスキャンをしているのに対してParquetのスキャン量はかなり少ない。

Parquetで先程のSQLよりもスキャン量が少ないのは項目の属性とサイズの違いと思われる。

Run Time(実行時間)

データスキャン量

CSV

102.35 MB

Parquet

686.98 KB

where句を指定して集計

where句を指定して特定の行の数値項目に対して計算を行う。

実行SQL

select avg(count_val) from temp_humi_table where error_flag = 2

Run TimeはやはりParquetの方が短い。

またCSVはやはり全データに対してスキャンをしているのに対してParquetのスキャン量はかなり少ない。

但しParquetもWhere句を指定したからと言ってスキャン量が減るわけでは無くむしろスキャン量が増している。

列指向なので「特定の行だけを取り出す」からと言ってスキャン量が減るわけでは無いのだと思われる。

Run Time(実行時間)

データスキャン量

CSV

 102.35 MB

Parquet

775.96 KB

以上で今回の記事は終了とする。

最後に

この記事が何処かで誰かの役に立つことを願っている。

尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。