2025-09-15 13:11:45 +09:00

3.5 KiB
Raw Permalink Blame History

フォルダ設計

実用的な運用パターン

/data/<domain>/<layer>/y=<YYYY>/m=<MM>/d=<DD>/
# 例
/data/marketing/silver/y=2025/m=06/d=01/*.csv
/data/marketing/silver/y=2025/m=06/*.parquet
# サブドメインパターン /data/<domain/<subdomain>>/<layer>
/data/sales/orders/bronze/y=2025/m=06

パーティションディレクトリ構造 (Hive partitioning)

  • y=2025/m=06/d=01/ のように key=value で階層を切るのは、Hadoop/Hive 系からの習慣です。
  • BigQuery、Athena、Spark、Trino、DuckDB などほとんどのエンジンが理解できます。

レイヤ

  • bronze/ = 生データ(取ってきたまま、CSVなど)
  • silver/ = 整形済み(型そろえ、Parquet化、パーティション付与)
  • gold/ = 集計/マート用(ダッシュボード直結)

“品質レベル”が一目でわかる。AWSやGCPでもよく使う。

ファイル名などのイベント規則

フォルダで年月やドメインを切っているので、 ファイル名は中身や分割単位を表す情報を載せるのが一般的です。

  • イベント種別 or データセット名
    • orders, clicks, refundsなど
  • 日付/時間(分割単位)
    • 2025-06-01, 2025-06-01-15h など
  • バージョン or チャンク番号
    • 再生成や分割を考慮して _v1, _part-0001
# サンプル
clicks_2025-06-01_v1.csv
impressions_2025-06-01_v1.csv
conversions_2025-06-01_v1.csv

# チャンク
clicks_2025-06-01_part-0001.csv

パイプライン型パターン

  • ELT型(データ)Extract(取得) → Land(保存) → Transform(SQL/dbt/duckdb)
  • ML型データ準備 → 特徴量 → 学習 → 評価 → 登録(MLflow/Weights&Biases)
  • イベント処理:ストリーム受信 → 変換 → 集計 → マート出力(Kafka→Druid/Pinot/ClickHouse
  • バッチETL取り込み → 正規化 → 検証 → 出力(Airflow/Dagster/Luigi/Prefectでオーケストレーション)
  • dbt型ソース → ステージング → マート(SQL中心・テストとドキュメント込み)

ETL / ETL

ELTとは (Extract → Load → Transform)

取得 → DBへロード → 変換の流れで実行 変換は SQL や dbt など、DWH自体の計算能力を使う。 BigQuery / Snowflake / Redshift などのクラウドDWHの時代に主流になった。

メリット

  • 生データを残せるLandに置くので後から再処理できる

ETLとは (Extract → Transform → Load)

取得 → 変換 → DBへロードの流れで実行 90年代〜2010年代前半までの「オンプレDWH」時代によく使われた。 変換はアプリケーションサーバーや専用ETLツールでやるイメージです

汎用性を高めるための設計原則

  • I/Oはアダプタ分離FS/GCS/S3/DB接続は adapters/(同じ関数シグネチャで差し替え)
  • 実行ドライバは3種
    • CLI(ローカル/CI): python -m app run --date 2025-09-13
    • HTTP(GCF/Cloud Run): main(request) → 同じ関数を呼ぶ
    • スケジューラ(Cloud Scheduler / cron / GitHub Actions)

用語集

ETL / ELT

Extract, Transform, Load(または Load, Transform) データパイプラインの基本パターン

データレイク (Data Lake)

生データをフォーマット問わず保存する場所。S3/GCS/HDFSなど

データウェアハウス (DWH)

整形済みデータを分析用に最適化して保存するDB(BigQuery, Snowflake, Redshift など)