論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
データレイク
Data Lake
データエンジニアリング

💡 30秒で分かる結論

構造化・非構造化を生のまま保存する大規模ストレージ

🎨 直感で掴む

データを「分析・モデリングに使える形に整える」工程。 分析の質はここで 8 割決まります。

本ページでは データレイク を、 定義・前提条件・使い方・落とし穴の順に整理して解説します。 厳密な定義より、 まず何を、 いつ、 どう使うかを理解することを優先してください。

📐 定義

構造化・非構造化を生のまま保存する大規模ストレージ

英語名 Data Lake

🎯 いつ・どこで使うか

📋 前提条件・適用範囲

この用語を理解・使用するときは、 次のような前提を意識してください:

⚠️ よくある落とし穴

❌ テスト時の未知カテゴリ
OneHotEncoder(handle_unknown="ignore") 等で対応。
❌ リーク防止
前処理は CV の各 fold 内で fit。 Pipeline を使う。
❌ 文字コード
日本語 CSV は utf-8 / cp932 を試す。

🐍 Python での扱い

SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
import numpy as np

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
print(df.shape)
print(df.dtypes)
print(df.describe())

# 「データレイク」の文脈で扱う場合の例:
# 分野: データエンジニアリング
# 関連手法は同カテゴリの他用語を参照してください。

具体的なコードは データエンジニアリング を参照してください。

📝 レポートでの報告

分析結果を報告するときに含めるべき情報:

✅ チェックリスト

🔖 キーワード索引

結論深掘り 文脈 直感 アーキテクチャ フォーマット Python 落とし穴 関連手法 関連用語 グループ教材 事例 歴史

💡 30秒で分かる結論(補足)

データレイク ── 構造化・半構造化・非構造化を問わず生のまま低コストに蓄積する大規模ストレージ。 ETL 後に整える DWH と対照的に 「貯めてから考える」 思想。

📍 文脈 ── あなたが今見ているもの

データレイクは データエンジニアリング の蓄積層の中核です。 上流は データ収集センサーSNS行動ログ、 下流は DataFrame ・ BI ・ ML パイプライン。

対比概念は データウェアハウス(DWH、 整形済み・スキーマ厳格)とRDB(行指向・トランザクション)。 「型が決まっていない / 後で型を決めたい」生データはレイクへ、 「定型集計が走る」整形済みは DWH へ、と使い分けます。

🏗 典型的なアーキテクチャ(Medallion)

Databricks が広めた Bronze / Silver / Gold 3 層構造が定石。 段階的にデータを精錬していくモデルです:

役割 形式 利用者
Bronze(生)取り込みそのまま、 監査用JSON, CSV, ログ原文基盤エンジニア
Silver(整形済)クレンジング、 名寄せ済Parquet/Delta、 型定義ありデータサイエンティスト
Gold(業務向け)事業 KPI に集計星型・スター スキーマアナリスト・BI

この階層化が、 「データを失わず、 用途別に最適化する」レイクの核心。 Bronze には全てを残し、 Silver / Gold は再生成できる前提で設計します。

📁 ストレージフォーマットの選び方

フォーマット 指向 圧縮率 向く用途
CSV低(圧縮しない場合)交換、 簡易共有
JSON半構造化、 ログ
AvroKafka 連携、 ストリーミング
Parquet高(10倍)分析、 OLAP の定番
ORCHive エコシステム
Delta Lake列+ログACID、 Time Travel
Iceberg列+メタベンダ中立、 スキーマ進化
Hudi列+ログ更新が多いストリーム

2025 年現在、 列指向(Parquet)+テーブルフォーマット(Iceberg/Delta)の組合せが事実上の標準。 CSV は人間用、 内部処理は Parquet が無難です。

📐 コストの計算式

クラウドデータレイクの月額コストは大きく次の和で表せます:

$$ C_{\text{月}} = C_s + C_r + C_w + C_q $$

$C_s$=ストレージ容量料、 $C_r$=API リクエスト料、 $C_w$=ネットワーク転送料、 $C_q$=クエリ料(Athena/BigQuery 等)。 ストレージは安いが、 「クエリで全件スキャン」を繰り返すと $C_q$ が急増。 列指向+パーティション分割で対策します。

項目 単価(参考) 節約策
S3 Standard$0.023 / GB / 月古いデータは IA / Glacier へ
S3 リクエスト$0.005 / 1000 PUT小ファイルを結合(compaction)
Athena$5 / TB スキャンパーティション・列指向・LIMIT
BigQuery$6.25 / TB同上、 予約計算枠
転送 (外向き)$0.09 / GB同リージョン内で完結

🐍 Python 実装(取り込み〜分析)

(1) SSDSE-B のような CSV を S3 へ Parquet で投入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import pandas as pd
import boto3

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)

# 年でパーティション分割した Parquet 出力
df.to_parquet('data/lake/bronze/ssdse_b.parquet',
              partition_cols=['年度'], compression='snappy')

# S3 にアップロード
boto3.client('s3').upload_file(
    'data/lake/bronze/ssdse_b.parquet',
    'my-data-lake', 'bronze/ssdse/year=2026/data.parquet')

(2) DuckDB で S3 上の Parquet をローカル PC から直接クエリ(最近の定番):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import duckdb

con = duckdb.connect()
con.execute("INSTALL httpfs; LOAD httpfs;")

# S3 上の Parquet 全体に SQL(必要列のみ列指向で読み込み)
q = """
SELECT 都道府県, AVG(高齢化率) AS avg_aging
FROM read_parquet('s3://my-data-lake/silver/ssdse/*.parquet')
GROUP BY 都道府県
ORDER BY avg_aging DESC
LIMIT 10;
"""
print(con.execute(q).fetch_df())

(3) Delta Lake で ACID トランザクション

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from deltalake import write_deltalake, DeltaTable

# 初回書き込み
write_deltalake('data/lake/silver/ssdse', df, mode='overwrite')

# 更新(UPSERT 風)
dt = DeltaTable('data/lake/silver/ssdse')
dt.merge(
    source=df,
    predicate='source.都道府県 = target.都道府県 AND source.年度 = target.年度',
    source_alias='source',
    target_alias='target',
).when_matched_update_all().when_not_matched_insert_all().execute()

# Time Travel:1 バージョン前の状態を取得
old = DeltaTable('data/lake/silver/ssdse', version=0).to_pandas()
print(old.head())

⚠️ さらなる落とし穴

❌ 1. データスワンプ化
無計画に投入し続け、 何があるか分からない沼に。 カタログ(DataHub 等)と命名規約を最初から整備。
❌ 2. 小ファイル過多
ストリーミング書き込みで 1 KB ファイルが大量発生 → メタデータ操作が重くなる。 OPTIMIZE / compaction を定期実行。
❌ 3. パーティション設計ミス
分割しすぎ・しなさすぎ両方が遅い。 「クエリでよく WHERE する列」で分割し、 1 パーティション 100MB〜1GB が目安。
❌ 4. アクセス制御の手抜き
S3 バケットを誤って公開し個人情報流出。 Block Public Access + IAM+暗号化を必須セットで。
❌ 5. スキーマ進化に対応していない
列が増えた/型変更が起きるとクエリが壊れる。 Iceberg/Delta はスキーマ進化をサポートするので採用検討。
❌ 6. ライフサイクル未設定
古いデータも Standard 階層のままで月額が膨張。 90 日経過で Glacier 等に自動遷移するライフサイクル ルール必須。

🌐 関連手法・派生

📖 事例:小売チェーンの POS データレイク

全国 1000 店舗、 1 日数千万件の POS データを 5 年保管する設計を考えます:

📜 歴史と発展

🏠 進化形:データレイクハウス

2020 年以降のトレンドが レイクハウス。 レイク(柔軟性)と DWH(信頼性)のいいとこ取りを目指します:

特性 レイク レイクハウス DWH
スキーマon read柔軟+強制on write 厳格
ACID×
Time Travel×
非構造化×
ML 連携
BI 性能
コスト

代表実装:Databricks Lakehouse、 Snowflake on Iceberg、 BigQuery + BigLake。 統合データ基盤として人気上昇中。

🎨 直感で掴む(深掘り)

「データレイク」という言葉そのものが比喩です。 川(データソース)から流れ込んだ水(データ)が、 形を整えずにそのまま大きな湖に溜まるイメージ。 利用者は釣り糸を垂らすように、 必要な時に必要な形でデータを取り出します。

対照的に、 データウェアハウス(DWH)は ペットボトル飲料 のような存在。 工場で品質管理され、 規格化されて店頭に並んでいる。 そのまま飲める一方、 「もう作り直せない」「色付き水(型変更)が欲しくても無理」という制約があります。

この自由度こそ「貯めてから考える(schema-on-read)」哲学の本質で、 IoT や SNS のように「将来どう使うか未知の」データを扱う現代において、 DWH より柔軟性が高い基盤として選好されるようになりました。

⚙️ End-to-End パイプライン

典型的なデータレイクの処理フローを順に追います。 各段階で使うツールも例示:

段階 入力 処理 出力 ツール例
1. 取得DB / API / IoTバッチ/ストリーム取得生 JSON, CSVFivetran, Kafka
2. 着地 (Bronze)生データそのまま蓄積Bronze テーブルS3 + Iceberg
3. 整形 (Silver)Bronzeクレンジング、 型統一Silver テーブルSpark, dbt
4. 集計 (Gold)Silver業務 KPI 集計Gold テーブルdbt, Spark SQL
5. 提供GoldBI/ML/APIレポート, 予測Tableau, MLFlow
6. 監視全層品質・SLAアラートMonte Carlo, Soda

🏢 主要クラウドベンダ比較

機能 AWS Google Cloud Azure Databricks
ストレージS3GCSBlob/ADLS Gen2下層は各社
クエリエンジンAthena, Redshift SpectrumBigQuery (Omni)Synapse, FabricPhoton
テーブルIceberg, Hudi, DeltaIceberg, BQDelta, IcebergDelta(主)
カタログGlue CatalogDataplexPurviewUnity Catalog
ETLGlue, EMRDataproc, DataflowSynapse, DFWorkflows
価格モデル従量従量+予約従量+予約DBU 課金

既存のクラウド契約に合わせるのが王道。 マルチクラウドなら Iceberg + Trino のオープン構成を検討。

🎯 設計時の 10 原則

  1. イミュータブル原則:書き込んだファイルは変更しない。 更新は新バージョン
  2. パーティションキー設計:「最も WHERE される列」(多くは日付)で分割
  3. 列指向必須:分析用は Parquet/ORC が原則。 CSV は人間用
  4. 命名規約環境/層/ドメイン/テーブル/パーティション の階層
  5. スキーマレジストリ:Avro/Parquet のスキーマを一元管理(Confluent SR 等)
  6. カタログ必須:何があるかを検索できる仕組み(Glue / Hive Metastore)
  7. 暗号化 at rest / in transit:両方とも有効化、 KMS 鍵管理
  8. 監査ログ常設:CloudTrail / Stackdriver でアクセス記録を保存
  9. ライフサイクル設定:古いデータは IA / Glacier に自動遷移
  10. 1 オブジェクト 100MB〜1GB:これより小さいとメタ操作が重い

❓ よくある質問

Q1. DWH と何が違うの?

DWH は 事前に スキーマ・前処理を厳格に行ってから格納するのに対し、 レイクは生のまま放り込んでクエリ時に解釈。 「先に整える vs 後で整える」が本質的な違い。 近年は両者の中間「レイクハウス」が主流。

Q2. オンプレ HDFS は今でも有効?

大企業のレガシーは現役ですが、 新規はクラウドのオブジェクトストレージ(S3/GCS/Blob)が主流。 オンプレ存続なら MinIO 等の S3 API 互換 OSS が選択肢。

Q3. 小規模なら DuckDB で十分?

数 TB までならローカル PC+DuckDB が最速・最安。 「ビッグデータ」と称しても実際は数十 GB 級、 ということが多く、 過剰スペック化への警鐘もあります。

Q4. Delta vs Iceberg、どちらを選ぶ?

Databricks 中心なら Delta、 AWS/オープン環境なら Iceberg が無難。 Iceberg は Snowflake, BigQuery, Trino など複数エンジン対応で、 ベンダ ロックイン回避の観点で支持を集めています。

Q5. 個人情報はレイクに入れていい?

入れてよいが、 ① 暗号化保管(KMS)、 ② IAM/RBAC でアクセス制御、 ③ マスキングビューでの参照、 ④ データガバナンス 規程の整備、 が必要。 「個人情報専用ゾーン」を分離して別バケットにする設計が多い。