大規模データ処理の土台、データウェアハウス・データレイク・ETL/ELT。
データレイクとデータウェアハウスって何が違うの?
どちらも大量データの保管庫だけど、使い方がちょっと違うのよ。 整理してみましょうか。
データウェアハウス(DWH)は『分析用に整形された構造化データ』の保管庫。 BigQuery・Redshift・Snowflakeが代表例。 SQL で分析しやすい。
データレイクは?
あらゆる形式の生データ(CSV・JSON・画像・ログ)を未加工で蓄積する保管庫。 S3・Google Cloud Storage・Azure Blob Storage が代表例。 安価で柔軟。
じゃあレイクが上流、DWHが下流みたいなイメージですかぁ?
そう、よくあるパターンは『レイク → 加工処理 → DWH → BIツール』。 加工処理がETLやELTよ。
ETL(Extract Transform Load)は『抽出→変換→ロード』。 加工してからDWHに投入。 古典的アプローチ。
ELT(Extract Load Transform)は『抽出→ロード→変換』。 まず生データをレイクやDWHに取り込み、必要に応じて変換する。 クラウドDWHの計算リソースを活用する現代的アプローチ。
# ELTの簡単な例(BigQueryへの接続)
from google.cloud import bigquery
import pandas as pd
client = bigquery.Client(project='my-gcp-project')
# 生データをレイクからロード
load_query = '''
CREATE OR REPLACE TABLE `my_dataset.raw_orders` AS
SELECT * FROM `my_dataset.s3_orders_external`
'''
client.query(load_query).result()
# DWH内で変換 (T)
transform_query = '''
CREATE OR REPLACE TABLE `my_dataset.daily_sales` AS
SELECT
DATE(ordered_at) AS order_date,
category,
SUM(amount) AS total_sales
FROM `my_dataset.raw_orders`
WHERE ordered_at >= CURRENT_DATE - INTERVAL 90 DAY
GROUP BY 1, 2
'''
client.query(transform_query).result()
# 結果取得
df = client.query('SELECT * FROM `my_dataset.daily_sales`').to_dataframe()
他に押さえておきたいキーワードってありますかぁ?
バッチ処理 vs ストリーミング処理、Hadoop・Spark(分散処理)、Kafka(ストリーミング)、dbt(SQLでELT)、Airflow(ワークフロー管理)は名前と役割を押さえて。
クラウドDWH3強: BigQuery(Google)、Redshift(AWS)、Snowflake(マルチクラウド)。 試験では『どれもDWH』『SQL中心で分析』を覚えれば十分。
うわぁ、覚えること多いなぁ…
DS検定★ではDWH/レイク/ETL/ELT/Hadoop/Sparkの『何の役割か』を押さえれば十分。 細かい実装は問われないわ。
確認クイズ
ELTとETLの違いとして最も正しいのはどれか。
- ELTはETLより必ず低速
- ELTはロードしてから変換、ETLは変換してからロード
- ETLは構造化データのみ、ELTは非構造化のみ
- 両者は同じ意味
こたえを見る
正解: 2. ELTはロードしてから変換、ETLは変換してからロード
ELTはロードしてから変換、ETLは変換してからロード。 順序の違いがそのまま名前の違いになっています。 ELTはクラウドDWHの計算リソースを活用できる現代的アプローチ。