LESSON 30分

ストーリー

田中VPoE
Step 1でデータ戦略とアーキテクチャの全体像を学んだ。ここからは具体的なコンポーネントの設計に入る。まずはデータレイクだ
あなた
データレイクは「あらゆるデータをそのまま格納する場所」ですよね。S3やGCSに何でも放り込む
田中VPoE
そうだ。ただし「何でも放り込む」だけだとデータスワンプになる。ディレクトリ構造、ファイルフォーマット、パーティショニング、アクセス制御。これらを戦略的に設計する必要がある
あなた
「とりあえずS3に入れておこう」はアンチパターンなんですね
田中VPoE
まさにそうだ。データレイクの設計次第で、後段のDWHやMLパイプラインの効率が大きく変わる。特にファイルフォーマットとパーティショニング戦略は、クエリ性能に10倍以上の差を生むことがある

データレイクの設計原則

5つの設計原則

原則説明実装
不変性(Immutability)一度書き込んだデータは変更しないAppend-only、バージョニング
スキーマオンリード書き込み時にスキーマを強制しない読み取り時にスキーマを適用
階層構造用途ごとにデータを整理Medallion(Bronze/Silver/Gold)
メタデータ管理データの所在と意味を追跡データカタログ、Glue Catalog
コスト最適化ストレージとクエリのコストを最小化ライフサイクルポリシー、圧縮

ストレージ設計

ディレクトリ構造

s3://company-data-lake/

├── bronze/                          # 生データ(ソースそのまま)
│   ├── app_db/                      # ソースシステム別
│   │   ├── orders/                  # テーブル別
│   │   │   ├── year=2025/           # パーティション
│   │   │   │   ├── month=01/
│   │   │   │   │   ├── day=15/
│   │   │   │   │   │   ├── part-00000.parquet
│   │   │   │   │   │   └── _metadata.json
│   │   │   │   │   └── day=16/
│   │   │   │   └── month=02/
│   │   │   └── _schema/
│   │   │       └── schema_v1.json
│   │   ├── customers/
│   │   └── products/
│   ├── crm/
│   │   ├── accounts/
│   │   └── opportunities/
│   └── event_logs/
│       └── clickstream/

├── silver/                          # クレンジング済みデータ
│   ├── orders/
│   ├── customers/
│   └── unified_events/

├── gold/                            # ビジネスロジック適用済み
│   ├── revenue_mart/
│   ├── customer_360/
│   └── marketing_mart/

└── _system/                         # システムメタデータ
    ├── audit_logs/
    ├── data_quality_reports/
    └── lineage/

パーティショニング戦略

戦略適用場面メリット
日付パーティション時系列データyear=2025/month=01/day=15/日付範囲クエリが高速
ソースパーティションマルチソースsource=salesforce/ソース別の処理が容易
リージョンパーティション地域別データregion=jp/地域別分析が効率的
ハッシュパーティション均等分散partition=0/partition=99/データスキューの回避

「パーティションの粒度は『最もよく使われるクエリパターン』に合わせる。日次バッチなら日付パーティション、リージョン別分析が多ければリージョンを第1パーティションにする」 — 田中VPoE


ファイルフォーマットの選択

主要フォーマット比較

フォーマット形式圧縮率クエリ性能スキーマ進化適用場面
Parquet列指向高(列プルーニング)対応分析クエリ、DWH連携
ORC列指向対応Hiveエコシステム
Avro行指向強いストリーム処理、スキーマ変更が多い
JSONテキスト柔軟ログ、API連携
CSVテキストなしレガシー連携、インポート/エクスポート
Delta LakeParquet + ログACID対応レイクハウス
Apache Icebergメタデータ層ACID対応レイクハウス(マルチエンジン)

選択フローチャート

ファイルフォーマット選択:

データの用途は?
├── 分析クエリ(SELECT特定列)  → Parquet / Iceberg
├── ストリーム処理              → Avro
├── ログの一時保存             → JSON(→ 後でParquetに変換)
├── ACID トランザクションが必要  → Delta Lake / Iceberg
└── レガシー連携              → CSV(最小限に)

データライフサイクル管理

ストレージクラスの活用(AWS S3)

ステージ保持期間ストレージクラスコスト(GB/月)
アクティブ0-30日S3 Standard$0.025
ウォーム30-90日S3 IA$0.0125
コールド90-365日S3 Glacier IR$0.004
アーカイブ1年以上S3 Glacier DA$0.00099

ライフサイクルポリシー例

{
  "Rules": [
    {
      "ID": "bronze-lifecycle",
      "Filter": { "Prefix": "bronze/" },
      "Status": "Enabled",
      "Transitions": [
        { "Days": 90, "StorageClass": "STANDARD_IA" },
        { "Days": 365, "StorageClass": "GLACIER_IR" }
      ]
    },
    {
      "ID": "gold-lifecycle",
      "Filter": { "Prefix": "gold/" },
      "Status": "Enabled",
      "Transitions": [
        { "Days": 180, "StorageClass": "STANDARD_IA" }
      ]
    }
  ]
}

セキュリティとアクセス制御

レイヤー別のアクセス制御

レイヤー対象制御方法
バケットレベルS3バケット全体バケットポリシー、パブリックアクセスブロック
プレフィックスレベルディレクトリIAMポリシーのResource条件
行・列レベルテーブル内のデータLake Formation、カラムマスキング
暗号化保存データSSE-S3、SSE-KMS

まとめ

ポイント内容
設計原則不変性、スキーマオンリード、階層構造、メタデータ管理、コスト最適化
ストレージ設計ソース別・テーブル別・日付パーティションのディレクトリ構造
ファイルフォーマット分析にはParquet/Iceberg、ストリームにはAvro、ACID対応にはDelta Lake
ライフサイクルストレージクラスの段階的移行でコスト最適化

チェックリスト

  • データレイクの5つの設計原則を説明できる
  • パーティショニング戦略を用途に応じて選択できる
  • ファイルフォーマットの特性と使い分けを理解した
  • ライフサイクルポリシーでコスト最適化を設計できる

次のステップへ

次は「データウェアハウスの設計」を学びます。BigQuery、Snowflake、RedshiftなどのクラウドDWHの特性と、効率的なデータモデリングを身につけましょう。


推定読了時間: 30分