mcpField
D
data-engineer

data-engineer

github.com/htlin222データ・データベース7835 回インストール3 週間前に更新
リポジトリ

data-engineer について

データエンジニア向けのスキルです。データパイプライン、ウェアハウス、ストリーミング処理、品質検査を扱い、拡張性と運用を考慮した実践例を示します。

主な機能

  1. 01ETL/ELTパイプライン設計
  2. 02ウェアハウスのスキーマ設計
  3. 03ストリーミングデータ処理
  4. 04データ品質チェック
  5. 05パイプラインの信頼性向上

活用シーン

  1. 01ユーザーイベント用Airflow DAGの設計
  2. 02売上データウェアハウスのモデル化
  3. 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 ジョブを最適化する」 アクション: パーティショニングを確認し、シャッフルを減らし、メモリ設定を調整する

コメント