100 lines
3.5 KiB
Markdown
100 lines
3.5 KiB
Markdown
|
||
## フォルダ設計
|
||
|
||
実用的な運用パターン
|
||
|
||
```sh
|
||
/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
|
||
|
||
|
||
```sh
|
||
# サンプル
|
||
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 など) |