はじめに
こんにちは、山本です。
今回はAWS資格の一つであるDEA(Data Engineering Associate)の学習中に気になった「列指向形式」データの概要やメリット・デメリットについてお話しします。
私と同じようにAWSの資格を勉強している方にとっての手助けになれば幸いです。
データ分析における落とし穴
データ分析用にデータレイクを構築する際、まず手軽な形式としてデータをCSV形式で保存することは一般的で広く行われていると思います。
しかし、CSV形式は「行指向」のフォーマットなので以下のような問題を引き起こすことがあります。
非効率なデータ読み込み
必要な列がごく一部であっても、行指向のフォーマットだと行全体をスキャンする必要があります。
これにより、読み込むデータ量が無駄に増えてしまいクエリの実行速度が大幅に低下するケースがあります。
高いコスト
テキスト形式であるため圧縮効率が悪く、ファイルサイズが大きくなってしまいます。
そのため、結果的にストレージコストやデータ転送コストが増大してしまうこともあります。
スキーマ情報の有無
CSVにはデータ型などのスキーマ情報がありません。そのため、分析ツールで読み込むたびに、手動でスキーマを定義する必要があり、手間になってしまうケースもあります。
データ分析のパフォーマンスとコストは、単にデータをどこに置くかだけでなく、どのような形式で保存するかに大きく左右されます。
列指向形式(Parquet)
行指向形式(CSV等)と列指向形式(Parquet等)のデータ保存方法
CSV形式と列指向形式では保存方法に大きな違いがあります。 今回は簡単な表を用いて保存方法の違いを解説します。
| ID | 名前 | 都市 | 年齢 |
|---|---|---|---|
| 1 | 山本 | 東京 | 25 |
| 2 | 佐藤 | 大阪 | 30 |
| 3 | 鈴木 | 福岡 | 28 |
行指向形式(CSV等)
- データは1行ずつ順番に保存されます。
- 例:
1,山本,東京,25
2,佐藤,大阪,30
3,鈴木,福岡,28
この場合、1人分の全ての情報(ID、名前、都市、年齢)がまとめて1行として保存され、次の人の情報が次の行に続きます。
列指向形式(Parquet等)
- データは1列ずつ順番に保存されます。
- 例:
ID列:[1, 2, 3]
名前列:[山本, 佐藤, 鈴木]
都市列:[東京, 大阪, 福岡]
年齢列:[25, 30, 28]
この場合、同じ項目(IDならID、名前なら名前)ごとにデータがまとめて保存されます。
列指向形式のメリット
効率的なデータ読み込み
クエリで特定の列だけを参照する場合は不要なデータを読み込まずに済むため処理速度が向上し、I/Oコストも削減できます。
高い圧縮率でのストレージコスト削減
同じ種類のデータが連続して保存されるため圧縮効率が良く、ファイルサイズを小さくできます。
スキーマ情報の保持
データ型やカラム名などの情報をファイル自体に持たせることができ、分析ツールでの取り扱いが容易になります。
列指向形式が向いていないユースケース
前半で紹介したCSV形式でのデータ分析における落とし穴について完璧にカバーできているようにも見えますが、列指向形式にも向いていないユースケースというのはきちんと存在しています。
全ての列を頻繁にまとめて読み書きする場合
例: トランザクション処理やOLTP(オンライン取引処理)など、1レコード全体を頻繁に追加・更新・取得する
理由: 列ごとにデータが分かれて保存されているため、1行分の全データを取得する際は複数の列を横断してアクセスする必要があり、行指向形式よりも非効率になることがある。
リアルタイムで大量の書き込みが発生する場合
例: ログデータの高速な追記や、IoTデバイスからの連続データ受信
理由: 列指向形式はバッチ処理や分析向けに最適化されているため、リアルタイムの高速書き込みには向いていない。
列指向形式は「分析・集計」に強いですが、「頻繁な行単位の処理」や「リアルタイム書き込み」には不向きのようです。ユースケースにおいての使い分けが必要になりますね。。。
おわりに
列指向形式(Parquetなど)は、データ分析や集計処理に非常に強みを持つ保存方法です。特定の列だけを効率よく読み込めるため、クエリの高速化やストレージコスト削減に役立ちます。また、スキーマ情報を保持できる点も分析ツールとの連携で便利です。
一方で、トランザクション処理やリアルタイム書き込みなど、頻繁に行単位でデータを扱う用途には向いていません。用途に応じて行指向形式(CSVなど)と使い分けることが重要です。
この「列指向形式 vs 行指向形式」理論は、AWSやデータ分析系の資格試験でも頻繁に問われるポイントだと勉強をしながら感じています。
実際のユースケースをイメージしながら、どちらが適しているかを判断できるようにしておくと、試験対策にも現場でも役立つと思うので、ぜひ理解を深めてみてください!
山本 竜也 (記事一覧)
2025年度新入社員です!AWSについてはほぼ未経験なのでたくさんアウトプットできるよう頑張ります✨