2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

どうも、そらです。

業務でAzure Data Factory(以下ADF)を触るようになったのですが、最初に「ExcelファイルのデータをSQLのテーブルにコピーする」という一番基本的な作業でかなりつまずきました。

やること自体はシンプルなのに、設定する場所が細かく分かれていて、どこを触ればいいのか分かりにくいです。

この記事では、私が実際に手を動かして分かった「一番シンプルなデータコピーのやり方」を、初心者向けに手順としてまとめます。

※画面の名称やメニューの位置は、時期やポータルの更新によって変わることがあります。実際の画面と照らし合わせながら読んでください。

この記事でわかること

  • ADFでExcelファイルのデータをSQLテーブルにコピーする手順
  • 先に用意しておくべき2つのデータセット(ソースとシンク)
  • Excelファイル側でやっておくべき準備
  • ファイルがあるかどうかを事前にチェックする方法(Get Metadata)
  • ステージングを有効にする場所
  • 初心者がつまずきやすいポイント

前提:先に言葉を整理する

ADFは専用の言葉が多いので、先に最低限だけ整理します。

言葉 ざっくりした意味
リンクサービス 接続先の情報(このExcelやSQLはここにある、という接続設定)
データセット 実際び読み書き対象(Excelのこのシート、SQLのこのテーブル等)
パイプライン 一連の処理のまとまり(作業全体の入れ物)
アクティビティ パイプラインの中に置く1つ1つの処理(コピー、チェックなど)
ソース コピー元(今回はExcel)
シンク コピー先(今回はSQLのテーブル)

つまり今回やることは、「ソース(Excel)のデータを、シンク(SQLテーブル)にコピーする」 という1本の流れです。

全体の流れ

先に完成形の流れを示します。この順番で進めます。

手順 やること
1 ソースデータセットとシンクデータセットを先に作る
2 Excelファイルをテーブル形式にしておく
3 シンク側のSQLに、ソースと同じ列名のテーブルをCREATE TABLEで作る
4 データセットの接続設定(シート名・先頭行をヘッダーに)を整える
5 スキーマのインポートで列名が正しく取れているか確認する
6 (応用)Get Metadataでファイルの存在をチェックする
7 必要ならステージングを有効にする

手順1:ソースとシンクのデータセットを先に作る

コピーの設定を始める前に、ソースデータセット(Excel側)とシンクデータセット(SQL側)を先に作っておく のがコツです。

コピーアクティビティを置いてから慌てて作ると、行ったり来たりして混乱します。先に2つとも作っておくと、後の設定がスムーズです。

  • ソースデータセット:コピー元のExcelファイルを指すデータセット
  • シンクデータセット:コピー先のSQLテーブルを指すデータセット

データセットの作り方は公式ドキュメントに画面付きで載っています。

手順2:Excelファイルはテーブル形式にしておく

これが最初のつまずきポイントでした。

ExcelファイルはExcelの「テーブル形式」にしておくと、ADFが列を正しく読み取りやすくなります。

普通にセルに入力しただけの表よりも、Excelの機能で「テーブル」として範囲を指定しておいたほうが、後のスキーマのインポート(手順5)で列名がきれいに取れます。
スクリーンショット 2026-07-08 093059.png

手順3:シンク側に同じ列名のテーブルを作る

コピー先(シンク)のSQLに、ソースのExcelと同じ列名のテーブルを、CREATE TABLEであらかじめ作っておきます。

ここでのポイントは「列名を合わせる」ことです。ソースとシンクで列名がそろっていれば、コピーの列の対応づけ(マッピング)が素直に通ります。

例(列名をExcel側とそろえる):

CREATE TABLE dbo.SampleTable (
    id      INT,
    name    NVARCHAR(100),
    price   INT
);

上の列名(id, name, price)は、Excel側の先頭行(見出し)と同じにしておきます。

手順4:データセットの接続設定(シート名・先頭行をヘッダーに)

ソースデータセット(Excel)の設定で、次の2つを必ず確認します。

ADFのデータセットを開き、「接続」タブ で設定します。

  1. 「シート名」 で、ソースデータとして使いたいシートの名前を選ぶ
  2. 「先頭行をヘッダーとして」 のチェックをオンにする
    「先頭行をヘッダーとして」をオンにしないと、1行目の見出しがデータとして扱われてしまい、列名がうまく取れません。

補足として、Get Metadataで列の構造(Structure)を取りたい場合も、この「先頭行をヘッダー」をオンにしておく必要があります。これはExcelや区切りテキスト形式でのみ使える設定です。
スクリーンショット 2026-07-08 094501.png

参考(Get Metadataの公式、Structureと先頭行ヘッダーの説明あり):
https://learn.microsoft.com/ja-jp/azure/data-factory/control-flow-get-metadata-activity

手順5:スキーマのインポートで列名を確認する

手順4まで設定したら、データセットの 「スキーマのインポート」 を実行します。

ここで、ソースデータの実際の列名と種類(型)が表示されればOK です。

もし列名が変な文字(Column1, Column2 など)になっている場合は、手順4の「先頭行をヘッダーとして」がオフになっている可能性が高いです。手順4に戻って確認してください。

手順6(応用):ファイルの存在をチェックする(Get Metadata)

「Excelファイルがちゃんと置かれているか、コピー前に確認したい」という場合は、Get Metadata(メタデータの取得) というアクティビティを使います。
image.png

「既存(Exists)」を設定する

Get Metadataアクティビティを選び、「設定」タブ「フィールドリスト」 で、引数として 「既存(Exists)」 を追加します。

この「既存(Exists)」を指定しておくと、ファイルが無かったときにアクティビティがいきなり失敗せず、結果として exists: false を返してくれます。逆に「既存」を指定していないと、ファイルが見つからないときにGet Metadata自体がエラーで止まります(これは公式ドキュメントに明記されています)。

参考(公式):
https://learn.microsoft.com/ja-jp/azure/data-factory/control-flow-get-metadata-activity

存在チェックの結果を後の処理で使う

Get Metadataの結果(存在するかどうか)は、後続の処理で次のような式で参照できます。

@activity('Excel1_metadata').output.exists
  • Excel1_metadata の部分は、自分が付けたGet Metadataアクティビティの名前に置き換えます
  • .output.exists で「存在した?(true / false)」を取り出します

この式を「If条件(If Condition)」アクティビティなどに入れておくと、「ファイルがあるときだけコピーを実行する」という分岐が作れます。

手順7:ステージングを有効化する

コピーの組み合わせによっては、ステージングを有効にする 必要があります。

ステージングとは、ソースからシンクへ直接コピーできない場合に、いったんAzure Blob StorageなどにデータをためてからシンクへコピーするADFの仕組みです。ADFが2段階のコピーを自動でやってくれます。

有効にする場所は、コピーアクティビティの「設定」タブ にある 「ステージングを有効にする」 のチェックです。

参考(ステージングの公式説明):
https://learn.microsoft.com/ja-jp/azure/data-factory/copy-activity-performance-features

なお「Excelソースだと必ずステージングが要るのか」という点については、コピー先やデータの状態によって変わります(推測です)。まずは有効にせず試し、直接コピーできないという趣旨のエラーが出たときに有効にする、という進め方が確実です。

初心者がつまずきやすいポイント

私が実際にハマった順に並べます。

1. データセットを先に作らずにコピーを組み始める

先にソースとシンクの2つを作っておくだけで、設定の行き来がかなり減ります。

2. 「先頭行をヘッダーとして」を入れ忘れる

これを忘れると、見出し行がデータになり、列名がうまく取れません。スキーマのインポートで列名がおかしいときは、まずここを疑ってください。

3. ソースとシンクで列名がそろっていない

シンク側のCREATE TABLEの列名を、Excelの見出しとそろえておくと、マッピングで悩まなくなります。

4. Get Metadataで「既存」を入れずにファイルが無くて止まる

存在チェックが目的なら、必ず「既存(Exists)」をフィールドリストに入れます。入れないと、無いときにアクティビティごと失敗します。

最後に

ADFのデータコピーは、1つ1つの設定はシンプルですが、「どこを・どの順番で触るか」 が分かりにくいのが最初のハードルだと感じました。

今回のポイントをまとめると、次の通りです。

  • ソースとシンクのデータセットは先に作る
  • Excelはテーブル形式にし、「先頭行をヘッダーとして」をオンにする
  • シンク側は同じ列名でCREATE TABLEしておく
  • スキーマのインポートで列名を確認する
  • 存在チェックはGet Metadataの「既存(Exists)」を使う
  • 直接コピーできないときはステージングを有効にする

この記事が、これからADFで初めてデータコピーをする方の参考になればうれしいです。


参考リンク(Microsoft公式)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?