目次
AWS Glue DataBrew 完全ガイド v2.0
初心者から実務者向けの包括的解説
AWS Glue DataBrew は、コードを書かずにデータの視覚的なクリーニング・変換を行うノーコード ETL サービスです。250+ のプリビルト変換を使って S3・Glue Data Catalog・Redshift・RDS・Snowflake のデータを対話的に変換できます。データアナリスト・データサイエンティストが ML モデル訓練向けのデータ前処理やデータ品質チェックを効率化します。本ドキュメントは、DataBrew の概念・アーキテクチャ・設計パターン・エコシステム・2025-2026 の最新動向を体系的に解説する包括的ガイドです。
ドキュメントの目的
本ガイドは以下を対象としています。
- 初心者向け: DataBrew とは何か、ノーコード ETL の基本を学びたい方
- データサイエンティスト向け: 特徴量エンジニアリング・EDA(探索的データ分析)
- データアナリスト向け: データクリーニング・品質チェック・プロファイリング
- データエンジニア向け: Glue ETL との使い分け・パイプライン設計
- 意思決定者向け: Trifacta・dbt Core・Alteryx との比較・投資判断
2026 年の DataBrew エコシステム
- AI 駆動変換推奨: LLM で変換パターンを自動提案
- Bedrock 統合: 生成 AI でデータ品質レポート自動生成
- マルチデータソース拡張: BigQuery・Elasticsearch 対応(検討中)
- リアルタイムプロファイリング (プレビュー):ストリーミングデータ向けの品質監視
- カスタム変換レシピ: ユーザー定義変換の作成・共有機能
- 連邦学習対応(検討中):オンプレ + クラウドデータの安全な統合
定義
AWS 公式による定義:
“AWS Glue DataBrew is a visual data preparation tool that enables users to clean and normalize data without writing any code.”
特徴:
- ノーコード GUI: ドラッグ&ドロップで変換定義
- 250+ 変換: 欠損値補完・正規化・ピボット・マスキング等
- データプロファイリング: 統計・欠損・PII 自動検出
- レシピ保存: 変換ルールを再利用・チーム共有
- マルチデータソース: S3 / Redshift / RDS / Glue Data Catalog
- 品質チェック: データ品質ルール定義・自動検証
目次
- 概要
- DataBrew が解決する課題
- 主な特徴
- Glue DataBrew vs Glue Spark ETL
- アーキテクチャ
- Project・Recipe・Dataset・Job
- 250+ 変換
- データプロファイリング
- PII 検出・マスキング
- 主要ユースケース
- 設定・操作の具体例
- CLI 操作
- SDK 実装例
- IaC (CloudFormation/Terraform)
- 類似サービス比較表
- ベストプラクティス
- トラブルシューティング
- セキュリティ・コンプライアンス
- パフォーマンスチューニング
- コスト最適化
- 2025-2026 最新動向
- 学習リソース・参考文献
- 実装例・チェックリスト
- まとめ
概要
初心者向けメモ: DataBrew は「ノーコードのデータクリーニング・変換ツール」です。Spark・SQL を書けない分析チームが、GUI で欠損値補完・型変換・正規化・マスキングを実装できます。Glue ETL は「複雑な変換をコードで実装」するのに向いていますが、DataBrew は「データ探索・品質確認・基本的な前処理」に向いています。
DataBrew は以下を実現します:
- ノーコード GUI - ドラッグ&ドロップで変換設計
- 250+ 変換 - よく使う処理が組み込み
- データプロファイリング - 統計・欠損・分布を自動計算
- PII 検出・マスキング - 個人情報の自動検出・保護
- レシピ保存・再利用 - 変換ルールを他データセットに適用
- 品質チェック - 自動データ品質検証
DataBrew が解決する課題
1. データ前処理コードが複雑・時間かかる
課題: Spark / SQL でデータ前処理を書くと、欠損値・型変換・正規化のコードが膨大
DataBrew の解決:
Spark コード 500+ 行(複雑な処理)
↓
DataBrew: GUI で 5 分で完成
├── 欠損値補完(平均 / 中央値)
├── 型変換(文字列 → 日付)
├── 外れ値除去
└── 正規化(Min-Max / Z-score)
2. データ品質問題の検出が遅い
課題: 分析途中に「NULL が多い」「値の範囲がおかしい」に気づく
DataBrew の解決: データプロファイリングで事前検出
プロファイルジョブ実行
↓
自動分析結果:
├── NULL: 15%(しきい値超過!)
├── 値の範囲外: 2% のレコード
├── 一意の値: 1,024
└── 相関関係: ヒートマップ表示
↓
品質問題を早期発見・対策
3. PII(個人識別情報)の保護が不十分
課題: 分析・テスト用データセットに顧客名・住所・クレジットカード番号が含まれたまま?
DataBrew の解決: 自動 PII 検出・マスキング
PII 検出:メール・電話・CC 番号・住所を自動検出
↓
マスキング変換:正規表現で [EMAIL] / [PHONE] に置換
↓
安全なテスト・分析用データセット作成
4. データセットの再利用性が低い
課題: 毎回、同じクリーニングを手作業で実装?
DataBrew の解決: レシピで再利用
レシピ作成:
1. 欠損値を中央値で補完
2. age を integer に変換
3. email をマスク
4. created_at を UTC に統一
↓
同じレシピを複数データセットに自動適用
主な特徴
| 特徴 | 説明 |
|---|---|
| ノーコード GUI | ドラッグ&ドロップで変換設計 |
| 250+ 変換 | 欠損値・正規化・ピボット・マスキング等 |
| データプロファイリング | 統計・欠損・分布を自動分析 |
| PII 検出 | メール・電話・CC 番号・住所を自動検出 |
| レシピ保存 | 変換ルールを再利用・チーム共有 |
| 品質ルール | NULL チェック・範囲チェック・パターンマッチ |
| マルチデータソース | S3 / Redshift / RDS / Glue Data Catalog |
| データプレビュー | 変換前後の最初の 500 行を可視化 |
| バッチジョブ | スケジュール実行で自動変換 |
| コスト効率 | 従量制・管理インフラ不要 |
Glue DataBrew vs Glue Spark ETL
| 観点 | DataBrew | Glue Spark ETL | Lambda |
|---|---|---|---|
| 対象ユーザー | アナリスト・DS | エンジニア | 開発者 |
| コーディング | なし(ノーコード) | Spark / PySpark | Python |
| 変換の自由度 | 250+ プリビルト | 完全カスタム | 完全カスタム |
| 学習曲線 | 低(GUI) | 中(Spark 習得必要) | 中(コード必須) |
| データプロファイリング | ✅ 自動統計分析 | ❌ | ❌ |
| PII 検出 | ✅ | ❌ | ❌ |
| レシピ再利用 | ✅ | 部分的 | ❌ |
| 大規模データ | ✅ GB~TB | ✅ TB~PB | 小~中 |
| スケール | データサイズに自動スケール | 明示的なワーカー設定 | 一度だけ実行 |
| 推奨用途 | EDA・前処理・品質確認 | 複雑 ETL・機械学習準備 | API・イベント駆動 |
アーキテクチャ
graph TB
Sources["データソース<br/>(S3 / Redshift / RDS / Glue Catalog)"]
Project["DataBrew Project<br/>(GUI)"]
Transforms["250+ 変換<br/>(ドラッグ&ドロップ)"]
Recipe["Recipe<br/>(変換ルール保存)"]
Profile["Profiling Job<br/>(統計・品質分析)"]
Quality["Quality Rules<br/>(品質チェック)"]
Output["Output<br/>(S3 / Redshift / Glue Catalog)"]
Sources -->|接続| Project
Project -->|操作| Transforms
Transforms -->|保存| Recipe
Project -->|実行| Profile
Profile -->|出力| Quality
Recipe -->|実行| Output
Quality -->|検証| Output
Project・Recipe・Dataset・Job
Project(プロジェクト)
Project: SalesData_Cleaning
├── Dataset: sales_raw.csv (S3)
│ └── 最初の 500 行を GUI で表示
│
├── Transforms:
│ ├── 欠損値を中央値で補完
│ ├── amount 列を DOUBLE に変換
│ ├── created_at を UTC に統一
│ └── email をマスク
│
└── Preview: 変換前後を可視比較
Recipe(レシピ)
変換ルールを永続化・再利用
Recipe: sales_cleaning_v2
├── Step 1: MissingValueImputation (amount, MEDIAN)
├── Step 2: TypeConversion (amount, DOUBLE)
├── Step 3: FormatConversion (created_at, ISO8601)
└── Step 4: MaskTransform (email, REGEX)
→ 異なるデータセットに自動適用
Job(ジョブ)
バッチ実行
ProfileJob: DailyQualityCheck
Schedule: 毎日 00:00 UTC
Input: s3://data-lake/raw/
Output: s3://data-lake/profiled/
RecipeJob: DailyTransform
Schedule: 毎日 01:00 UTC
Recipe: sales_cleaning_v2
Output: s3://data-warehouse/clean/
250+ 変換
データクリーニング
| 変換 | 説明 |
|---|---|
| MissingValueImputation | 欠損値を平均・中央値・固定値で補完 |
| RemoveDuplicate | 重複レコード削除 |
| OutlierDetection | 外れ値検出・削除 |
| NormalizeText | 大文字統一・トリム・特殊文字除去 |
フォーマット変換
| 変換 | 説明 |
|---|---|
| TypeConversion | 列の型変換(文字列 → 数値 / 日付) |
| FormatConversion | 日付フォーマット統一(YYYY-MM-DD) |
| ColumnSplit | 列の分割(“John Doe” → “John”, “Doe”) |
| ColumnMerge | 列の結合(複数列を 1 列に) |
ML 前処理
| 変換 | 説明 |
|---|---|
| Normalization | Min-Max / Z-score 正規化 |
| OneHotEncoding | カテゴリ変数を 0/1 で展開 |
| LabelEncoding | カテゴリを整数に変換 |
| Tokenization | テキストをトークン化 |
| StopwordRemoval | ストップワード除去 |
セキュリティ・PII
| 変換 | 説明 |
|---|---|
| MaskEmail | メール → [EMAIL] |
| MaskPhone | 電話 → [PHONE] |
| MaskCreditCard | CC 番号 → [CARD] |
| Hashing | SHA-256 ハッシュ化 |
データプロファイリング
自動統計分析
プロファイルジョブ実行
↓
自動分析項目:
├── 各列の統計(min, max, 平均, 中央値)
├── NULL 値の割合
├── 一意の値数(distinct count)
├── 値の頻度分布
├── データ型の不整合
├── 数値の外れ値
└── 相関関係マトリックス(ヒートマップ)
データ品質ルール
Rule 1: NullCheck
列: age
条件: 15% 以上の NULL は警告
Rule 2: RangeCheck
列: age
条件: 0 ≤ age ≤ 120
Rule 3: PatternMatch
列: email
条件: 正規表現 ^[\w\.-]+@[\w\.-]+\.\w+$
Rule 4: UniquenesCheck
列: user_id
条件: 100% ユニーク値
PII 検出・マスキング
自動 PII 検出
DataBrew は以下を自動検出:
- 個人名 - “John Doe”, “田中太郎”
- メールアドレス - user@example.com
- 電話番号 - 090-1234-5678
- クレジットカード - 4532-1234-5678-9010
- 住所 - “東京都渋谷区”
- 社会保障番号 - 123-45-6789
- パスポート番号
マスキング変換
- 元データ:
- “Customer: John Doe, Email: john@example.com, Phone: 090-1234-5678”
- マスキング後:
- “Customer: [PERSON], Email: [EMAIL], Phone: [PHONE]”
ハッシング化
元: customer_id = "CUST-12345"
↓
SHA-256 ハッシング
↓
結果: "3a7bd3e2...(ハッシュ値)"
↓
ハッシュキーで元に復号可能(監査用)
主要ユースケース
-
ML データ準備
- 特徴量エンジニアリング・欠損値補完・正規化
- SageMaker 訓練データ前処理
-
データウェアハウス ETL
- S3 のログデータ → Redshift へのロード前処理
- 型変換・正規化・フィルター
-
データ品質モニタリング
- 毎日のデータプロファイリング
- 異常検知(欠損率急増等)
-
PII 保護・匿名化
- テスト・分析用データセットの個人情報マスキング
- GDPR / CCPA コンプライアンス
-
EDA(探索的データ分析)
- データの統計分析・分布確認
- アナリストがビジネス仮説を検証
-
データ統合・クレンジング
- 複数ソース(DB・API・ファイル)のデータを統一フォーマット化
-
データレイク管理
- 生データ → Bronze (クリーン) → Silver (統合) → Gold (分析用) の各レイヤーを DataBrew で自動化
-
コンプライアンスデータ処理
- HIPAA / PCI-DSS 準拠のための PII 除去・監査
設定・操作の具体例
AWS Management Console での作成
-
新規プロジェクト
Project name: SalesAnalytics_Clean Data source: s3://my-bucket/sales/ -
データセット選択
ファイル: sales_2026_04.csv → 最初の 500 行を GUI で表示 -
変換追加
+ Add step ├── Delete duplicates ├── Handle missing values (amount: MEDIAN) ├── Normalize numbers (price: MIN_MAX) └── Mask sensitive data (customer_name: HASH) -
プレビュー確認
前: customer_name = "John Doe" 後: customer_name = "3a7bd3e2..." -
レシピ保存
Recipe name: sales_cleaning_v1 → 他のデータセットに再利用可
CLI 操作
Project 作成
aws databrew create-project \
--name SalesAnalytics \
--dataset-name sales_raw \
--sample SIZE \
--role-arn arn:aws:iam::123456789012:role/DataBrewRole
Recipe 作成
aws databrew create-recipe \
--name sales_cleaning \
--steps '[
{"Action": {"Operation": "DELETE_DUPLICATE_ROWS"}},
{"Action": {"Operation": "IMPUTE_MISSING_VALUES", "Parameters": {"aggregation": "MEDIAN"}}}
]'
Job 実行
aws databrew create-job \
--name DailyClean \
--type RECIPE \
--dataset-name sales_raw \
--recipe-name sales_cleaning \
--output-location s3://output-bucket/clean/ \
--role-arn arn:aws:iam::123456789012:role/DataBrewRole
Job スケジューリング
aws databrew create-schedule \
--name DailyRun \
--cron-expression "cron(0 1 * * ? *)" \
--job-names DailyClean
SDK 実装例
Python (Boto3)
import boto3
import json
databrew = boto3.client('databrew', region_name='us-east-1')
# Project 作成
def create_project():
response = databrew.create_project(
Name='SalesAnalytics',
DatasetName='sales_raw',
RoleArn='arn:aws:iam::123456789012:role/DataBrewRole',
Sample={'Type': 'FIRST_N', 'Size': 500}
)
print(f"Project created: {response['Name']}")
return response
# Recipe 作成
def create_recipe():
response = databrew.create_recipe(
Name='sales_cleaning',
Steps=[
{
'Action': {
'Operation': 'DELETE_DUPLICATE_ROWS'
}
},
{
'Action': {
'Operation': 'HANDLE_MISSING_VALUES',
'Parameters': {
'sourceColumn': 'amount',
'strategy': 'IMPUTE',
'value': 'MEDIAN'
}
}
}
]
)
print(f"Recipe created: {response['Name']}")
return response
# Job 実行
def run_job():
response = databrew.start_job_run(
Name='DailyClean'
)
print(f"Job started: {response['Run']}")
return response
# プロファイル取得
def get_profile():
response = databrew.describe_profile_job(
Name='DailyQualityCheck'
)
print(f"Profile: {json.dumps(response, indent=2, default=str)}")
return response
if __name__ == '__main__':
create_project()
create_recipe()
run_job()
get_profile()
Java
import software.amazon.awssdk.services.databrew.DataBrewClient;
import software.amazon.awssdk.services.databrew.model.*;
public class DataBrewExample {
public static void main(String[] args) {
DataBrewClient dataBrewClient = DataBrewClient.builder().build();
// Project 作成
CreateProjectRequest projectRequest = CreateProjectRequest.builder()
.name("SalesAnalytics")
.datasetName("sales_raw")
.roleArn("arn:aws:iam::123456789012:role/DataBrewRole")
.sample(Sample.builder()
.type(SampleType.FIRST_N)
.size(500)
.build())
.build();
CreateProjectResponse projectResponse = dataBrewClient.createProject(projectRequest);
System.out.println("Project created: " + projectResponse.name());
// Recipe 作成
CreateRecipeRequest recipeRequest = CreateRecipeRequest.builder()
.name("sales_cleaning")
.steps(RecipeStep.builder()
.action(RecipeAction.builder()
.operation("DELETE_DUPLICATE_ROWS")
.build())
.build())
.build();
CreateRecipeResponse recipeResponse = dataBrewClient.createRecipe(recipeRequest);
System.out.println("Recipe created: " + recipeResponse.name());
dataBrewClient.close();
}
}
IaC (CloudFormation/Terraform)
CloudFormation
AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS Glue DataBrew Setup'
Resources:
DataBrewRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: databrew.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSGlueDataBrewServiceRole
OutputBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: databrew-output-bucket
VersioningConfiguration:
Status: Enabled
DataBrewJob:
Type: AWS::DataBrew::Job
Properties:
Name: DailyClean
Type: RECIPE
DatasetName: sales_raw
RecipeName: sales_cleaning
Outputs:
- Location:
Bucket: !Ref OutputBucket
Key: clean/
RoleArn: !GetAtt DataBrewRole.Arn
Terraform
resource "aws_iam_role" "databrew_role" {
name = "databrew-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "databrew.amazonaws.com"
}
}]
})
}
resource "aws_s3_bucket" "databrew_output" {
bucket = "databrew-output-bucket"
versioning {
enabled = true
}
}
resource "aws_databrew_job" "daily_clean" {
name = "DailyClean"
type = "RECIPE"
dataset_name = "sales_raw"
recipe_name = "sales_cleaning"
role_arn = aws_iam_role.databrew_role.arn
outputs {
location {
bucket = aws_s3_bucket.databrew_output.id
key = "clean/"
}
}
}
類似サービス比較表
| 比較軸 | DataBrew | Trifacta | dbt Core | Alteryx | Talend |
|---|---|---|---|---|---|
| 型 | AWS 管理 | SaaS | OSS | SaaS | on-Prem / Cloud |
| コーディング | ノーコード | ノーコード | SQL/Python | ノーコード | ノーコード |
| 学習曲線 | 低 | 低 | 中 | 低 | 中 |
| 変換数 | 250+ | 400+ | 無制限 | 500+ | 600+ |
| データプロファイリング | ✅ 自動 | ✅ 自動 | 限定的 | ✅ 自動 | ✅ 自動 |
| AWS 統合 | ✅ ネイティブ | API | Glue 対応 | 限定的 | 限定的 |
| 推奨用途 | AWS + EDA | 汎用 | DW 変換 | エンタープライズ | エンタープライズ |
| コスト | 従量制 | SaaS(高) | 無料 | SaaS(高) | on-Prem(高) |
ベストプラクティス
✅ 推奨パターン
-
段階的なパイプライン
- Bronze(生) → Silver(クリーン) → Gold(分析用)
-
レシピの再利用
- 同じ処理を複数データセットに自動適用
-
品質ルール定義
- 自動検証で問題を早期発見
-
PII 保護
- すべてのデータセットにマスキング適用
❌ アンチパターン
-
過度な変換
❌ 250+ 変換全て適用 ✅ 必要な変換のみ(5-10 個) -
品質ルールなし
❌ ジョブ実行後に問題発見 ✅ 自動検証で事前チェック
トラブルシューティング
| 症状 | 原因 | 対策 |
|---|---|---|
| Job タイムアウト | 大規模データセット | ノード数増加・バッチ分割 |
| メモリ不足 | 変換が多すぎる | 段階的実行・最適化 |
| 出力ファイル形式エラー | Glue Catalog スキーマ不一致 | スキーマ確認・変換調整 |
セキュリティ・コンプライアンス
| 項目 | 実装 |
|---|---|
| IAM | リソース単位の権限制御 |
| KMS | 保存時暗号化 |
| TLS | 転送中の暗号化 |
| PII 検出 | 自動マスキング |
| CloudTrail | API 操作の監査 |
パフォーマンスチューニング
- ノードサイズ - 大規模データは G.2X
- 変換順序 | フィルター → 複雑な変換(効率化)
- 並列処理 - 複数ジョブの並行実行
コスト最適化
インタラクティブセッション: $1/時間
ジョブ(G.1X): $0.48/時間
プロファイリング: $1/時間
例: 月 20 時間セッション + 50 時間ジョブ
= (20 × $1) + (50 × $0.48) = $44/月
2025-2026 最新動向
- AI 駆動変換推奨 - LLM で最適な変換を自動提案
- Bedrock 統合 - 生成 AI でレポート自動生成
- リアルタイムプロファイリング - ストリーミングデータ監視
- マルチデータソース拡張 - BigQuery・Elasticsearch 対応検討
学習リソース・参考文献
公式リソース
ベンダー・OSS リソース
実装例・チェックリスト
チェックリスト
- [ ] データソース接続(S3 / Redshift / RDS)
- [ ] プロジェクト・ダータセット作成
- [ ] プロファイリングジョブ実行・統計確認
- [ ] 必要な変換ステップ設計(5-10 個に絞る)
- [ ] PII 検出・マスキング設定
- [ ] レシピ保存・バージョン管理
- [ ] 品質ルール定義
- [ ] ジョブスケジューリング
- [ ] IAM ロール・権限設定
- [ ] コスト見積もり・最適化
まとめ
AWS Glue DataBrew は 「ノーコード ETL・データクリーニング・品質確認ツール」 です。250+ の組み込み変換でコードなしにデータを前処理し、自動プロファイリングで統計・品質・PII を検出します。アナリスト・データサイエンティストが EDA・特徴量エンジニアリング・PII 保護を効率化でき、Glue Spark ETL とは役割が異なる補完的なサービスです。
最終更新:2026-04-26 バージョン:v2.0