DEA / ドメイン1 データの取り込みと変換

データエンジニアリングのプログラミング

データエンジニアは、 でデータを集計し、Python や Scala で変換処理を書き、シェルスクリプトで作業を自動化します。どの言語をどの場面で使うか、どんなデータ構造とアルゴリズムが処理の速さを決めるかを知っていると、取り込みと変換のランタイムを短くできます。

DEA では、言語とフレームワークの使いどころ、データ構造 (グラフ、ツリー、ハッシュ) の考え方、コードの最適化、そして生成 AI によるコーディング支援 () が問われます。

Point
  • Framework = 枠組み です。Apache Spark のように、分散処理などの共通の仕組みを提供し、利用者は処理の中身だけを書けばよい土台を指します。
  • Algorithm = 計算の手順 です。同じ結果でも、手順の選び方で処理時間が大きく変わります。
  • 和訳

概要

データパイプラインのどこで、どの言語を使うかを整理します。

概要の図 取り込みPython / Java 変換PySpark / Scala / SQL ロードと集計SQL 分析SQL / Python / R 運用の自動化Bash / PowerShell / Python
言語主な使いどころAWS での例
集計、結合、フィルター、テーブルの作成、、 の SQL、 の Hive /
Python変換、 呼び出し、自動化、の前処理Glue (PySpark、Python shell)、、 の 、boto3
ScalaSpark のネイティブ言語。型があり、JVM 上で高速Glue の Scala ジョブ、EMR の Spark アプリケーション
Java や のアプリケーション、、 のコンシューマー
R統計解析と可視化 のノートブック
Bash / PowerShellファイル操作、CLI の実行、定型作業の自動化 のスクリプト、EMR のブートストラップアクション、MWAA の起動スクリプト

主要技術

①言語とフレームワークの選び方 ⚠️ 頻出

要件選ぶもの理由
テーブルのデータを集計・結合したい宣言的で、 や のエンジンが実行計画を最適化します。
大量データを分散して変換したいPySpark (、)Python で書け、 が並列に処理します。
Spark で型安全に、性能を突き詰めたいScalaSpark 自体が Scala で書かれています。
小さなファイルの軽い変換、 の呼び出しPython (、Glue Python shell)起動が軽く、ライブラリが豊富です。
ストリームの状態を持つ処理Java / Python の アプリケーション で動かします。
定型のファイル移動やコマンド実行Bash / PowerShell短いスクリプトで自動化できます。

同じ処理を SQL で書けるなら、まず SQL を考えます。Spark でも、DataFrame や Spark SQL で書くと、オプティマイザーが述語のプッシュダウンや結合の方法を自動で選びます。行ごとに Python の関数 (UDF) を呼ぶ書き方は、組み込み関数よりも遅くなりがちです。


②データ構造とアルゴリズム

データ構造は、データの持ち方です。持ち方によって、探す、足す、並べる操作の速さが変わります。

データ構造形得意なことデータエンジニアリングでの例
配列・リスト順番に並べたもの先頭から順に読むファイルの行を順に処理する
ハッシュテーブル (辞書)キーから位置を計算して置くキーでの検索がほぼ一定時間重複の判定、結合 (ハッシュ結合)、 のによる振り分け
ツリー (木構造)親と子の階層範囲の検索、並べ替えた状態の維持データベースの B ツリーのインデックス、 や XML の入れ子、ディレクトリの階層
グラフ点 (ノード) と線 (エッジ)つながりの探索 の友人関係、不正検知のつながり、、 によるワークフロー ( で格納)
キュー先に入れたものを先に出す順番待ちの処理、 のタスクのキュー
Point
  • Hash = 細かく刻む の意味です。キーから決まった計算で番号 (ハッシュ値) を作り、その番号の場所に置くことで、探す手間を省きます。
  • Graph はここでは「グラフ理論のグラフ」で、棒グラフではありません。点と線でつながりを表す構造です。
  • Tree は1つの根から枝分かれしていく階層構造です。輪 (閉路) はありません。

アルゴリズムの速さは、データ量 n が増えたときに処理時間がどう増えるかで比べます。

処理単純なやり方速いやり方
2つのデータセットの結合全組み合わせを比べる (n × m)小さい方をハッシュテーブルにして照合する (ハッシュ結合)、小さい方を全ノードに配る ()
重複の除去全件と比べるハッシュで判定する
範囲の検索全件を読む並べ替え済みのデータやツリーのインデックスを使う、パーティションで読む範囲を絞る
依存関係のある処理の実行順登録した順に実行する処理をノード、依存をエッジとする有向グラフにし、トポロジカルソートで順序を決める (順序が求まらなければ循環がある)

③取り込みと変換のランタイムを短くするコード

手法内容
読む量を減らす必要な列だけを読む (列指向の )、パーティションとで必要な範囲だけを読みます。
早めに絞る結合や集計の前にフィルターをかけ、扱う行を減らします。
結合を工夫する小さいテーブルはにし、 (ノード間のデータの移動) を減らします。
組み込み関数を使う行ごとの Python の UDF より、 の組み込み関数や を使います。
まとめて呼ぶ や への書き込みは、1件ずつではなくバッチ (BatchWriteItem など) で行います。
少しずつ読む大きなファイルは全体をメモリに載せず、ストリームとして少しずつ読んで処理します (boto3 の get_object の本文を iter_lines で読むなど)。
並列にする では接続や のクライアントをハンドラーの外で作って再利用し、Spark ではパーティション数を調整します。応答の待ちが中心の API の呼び出しは、相手の同時接続の制限の範囲で並行に送ります。
ファイルの数を整える小さなファイルを大量に作らないよう、出力のパーティション数を調整します (#20)。

④Amazon Q Developer によるコードの生成と最適化

は、生成 AI でコードの作成、説明、最適化、テストの作成を手伝う AWS のアシスタントです。データエンジニアリングでは、 や PySpark のコードの生成、既存のコードの説明と改善案、AWS のサービスについての質問に使えます。 Studio のノートブックや Unified Studio でも、生成 AI によるコードの生成を使えます。

ただし、利用できる形には変化があります。Amazon Q Developer の IDE プラグインは、2026 年 5 月 15 日から新規のサインアップを受け付けておらず、2027 年 4 月 30 日にサポートを終了します。AWS は IDE でのコーディング支援の後継として (エージェント型の IDE と CLI) を案内しています。の中の Amazon Q Developer のチャットは、この終了の対象外です。

試験の問題文では「」「Amazon Q Developer」と書かれることがあります。その場合は、「生成 AI でコードの生成・説明・最適化を支援するサービス」として読み、社内文書の検索に使う (新規受付を終了) と区別します。


試験対策

①判断マトリクス

問題文のキーワード選ぶもの理由
のデータを集計・結合 ( / )宣言的で、エンジンが最適化します。
大量データの分散変換を Python でPySpark ( / ) が並列に処理します。
定型のファイル操作や CLI の実行を自動化Bash / PowerShell のスクリプト短いスクリプトで済みます。
つながりの探索 (友人関係、不正のネットワーク)グラフのデータ構造 ()ノードとエッジで関係を表します。
階層や範囲の検索ツリー (B ツリーのインデックスなど)並べ替えた状態で範囲を探せます。
キーで高速に探す、重複を判定するハッシュテーブルキーの検索がほぼ一定時間です。
大きいテーブルと小さいテーブルの結合が遅いを避けられます。
コードの生成・説明・最適化を生成 AI で支援 (IDE での支援の後継は )自然な文章でコードを作成・改善できます。

②よくある誤答

  • 集計を Python のループで書くこと。 や の組み込み関数の方が速く、短く書けます。
  • グラフとツリーを同じものと考えること。ツリーは輪のない階層、グラフは任意のつながりです。
  • 社内文書の検索に を選ぶこと。Q Developer はコーディングの支援です。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください