data-engineer について
データエンジニア向けのスキルです。データパイプライン、ウェアハウス、ストリーミング処理、品質検査を扱い、拡張性と運用を考慮した実践例を示します。
主な機能
- 01ETL/ELTパイプライン設計
- 02ウェアハウスのスキーマ設計
- 03ストリーミングデータ処理
- 04データ品質チェック
- 05パイプラインの信頼性向上
活用シーン
- 01ユーザーイベント用Airflow DAGの設計
- 02売上データウェアハウスのモデル化
- 03遅いSparkジョブの改善
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ htlin222/ dotfiles --skill data-engineerインストール後、Claude Code で/data-engineerを入力して読み込まれたか確認します。
詳細
データエンジニアリング
スケーラブルなデータパイプラインと分析インフラストラクチャを構築します。
使用する場面
- ETL/ELT パイプラインの設計
- データウェアハウスのモデリング
- ストリーミングデータ処理
- データ品質のモニタリング
Airflow DAG
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.utils.dates import days_ago
from datetime import timedelta
default_args = {
'owner': 'data-team',
'retries': 3,
'retry_delay': timedelta(minutes=5),
'email_on_failure': True,
}
with DAG(
'etl_pipeline',
default_args=default_args,
schedule_interval='0 2 * * *', # Daily at 2 AM
start_date=days_ago(1),
catchup=False,
) as dag:
extract = PythonOperator(
task_id='extract',
python_callable=extract_data,
)
transform = PythonOperator(
task_id='transform',
python_callable=transform_data,
)
load = PythonOperator(
task_id='load',
python_callable=load_data,
)
validate = PythonOperator(
task_id='validate',
python_callable=validate_data,
)
extract >> transform >> load >> validate
データウェアハウスのスキーマ
スタースキーマ
-- Fact table
CREATE TABLE fact_sales (
sale_id BIGINT PRIMARY KEY,
date_key INT REFERENCES dim_date(date_key),
product_key INT REFERENCES dim_product(product_key),
customer_key INT REFERENCES dim_customer(customer_key),
quantity INT,
amount DECIMAL(10,2),
created_at TIMESTAMP DEFAULT NOW()
);
-- Dimension tables
CREATE TABLE dim_date (
date_key INT PRIMARY KEY,
date DATE,
year INT,
quarter INT,
month INT,
week INT,
day_of_week INT
);
CREATE TABLE dim_product (
product_key INT PRIMARY KEY,
product_id VARCHAR(50),
name VARCHAR(255),
category VARCHAR(100),
-- SCD Type 2 fields
valid_from DATE,
valid_to DATE,
is_current BOOLEAN
);
Spark ジョブ
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, avg
spark = SparkSession.builder \
.appName("ETL Job") \
.config("spark.sql.adaptive.enabled", "true") \
.getOrCreate()
# Read with partitioning
df = spark.read \
.option("inferSchema", "true") \
.parquet("s3://bucket/data/") \
.filter(col("date") >= "2024-01-01")
# Transform
result = df \
.groupBy("category", "date") \
.agg(
sum("amount").alias("total_amount"),
avg("quantity").alias("avg_quantity")
) \
.repartition(10, "date") # Optimize for writes
# Write partitioned
result.write \
.mode("overwrite") \
.partitionBy("date") \
.parquet("s3://bucket/output/")
データ品質
from great_expectations.core import ExpectationSuite
suite = ExpectationSuite("sales_data")
# Define expectations
suite.add_expectation(
expect_column_values_to_not_be_null(column="sale_id")
)
suite.add_expectation(
expect_column_values_to_be_between(
column="amount", min_value=0, max_value=1000000
)
)
suite.add_expectation(
expect_column_values_to_be_unique(column="sale_id")
)
ベストプラクティス
- 冪等な操作(再実行可能)
- 全件更新よりも増分処理を優先する
- データリネージを追跡する
- スキーマの進化に対応する
- クラウドサービスのコストをモニタリングする
例
入力:「ユーザーイベント向けの ETL を設計する」 アクション: 抽出/変換/読み込みを含む Airflow DAG を作成し、品質チェックを追加する
入力:「遅い Spark ジョブを最適化する」 アクション: パーティショニングを確認し、シャッフルを減らし、メモリ設定を調整する
コメント
Markdown 対応