
こんにちは。やましー@データ活用クラウドエンジニア(@yamashi18041) です。
今日はデータ基盤にデータを取り込む方法について解説したいと思います。
以前、データ基盤の構成要素であるデータレイクついての記事を書きました。その中でデータレイクとは すべての生データを置いておく場所 と説明しました。
ではどのようにしてデータをデータレイクに置くのでしょうか。
概念だけの理解するのと、具体的な手法までを理解するのとでは、いざお客様との打ち合わせの際に具体的な手法まで理解してイメージできた方がしっかりと地に足が付いた提案をすることができるようになります。
ということで今回はAzure Data Factory を使ってデータ基盤の構成要素であるデータレイクへデータを入れて(インジェストして)みます。

教材としてはMicrosoft Learnの「Azure Data Factory におけるデータ インジェスト」を題材として使います。
教材自体は手順がはしょられている部分があるので、今回もスクショ多めで教材の手順にない空白部分を埋めながら、各設定項目についてもできるだけ詳細に解説していきたいと思います。
また、教材ではデータを取り込み、そのあとAzure Databricks(分散処理基盤Spark)による処理をするまで続きますが、今回はAzure Data Factory によるデータの移動までを対象とします。
Azure Databriks以降は次回解説したいと思います。
今回の記事の読者は以下の方を対象にしています。
- データ活用技術に興味がある
- Azureでデータレイクの作成方法が知りたい
- Azure Data Factoryの使い方を知りたい
- パイプラインについて知りたい
- クラウド技術について情報収集中
データインジェストのアーキテクチャ

今回の題材の概要です。
データレイクを作成する

まずデータを溜めるためのデータレイクを作成します。
Azureでデータレイクを実現するにはストレージアカウントを作成します。
ストレージアカウントを新規作成する

「すべてのサービス」から「ストレージアカウント」を選択し、管理画面へ遷移します。

「+追加」を選択します。基本項目設定画面へ遷移します。
ストレージアカウントの基本項目を設定する

①サブスクリプション:いつもお使いのものを選択します。
②リソースグループ:今回はデモ用に新規にリソースグループを作成しました。
③ストレージアカウント名:「ysmtechsa01」としました。
好きな名前を設定します。
④場所:「東日本」を選択しました。
⑤パフォーマンス:Standardを選択しました。
Standard はハードウェアとしてHDDを使用することになります。
PremiumのはSSDが使用されるので高速に読み書きができる反面コストが高くなります。
⑥アカウントの種類:StorageV2(汎用 v2)を選択しました。
V1はクラシックモデルのため、今後はV2の使用が推奨されています。
また、BlobStoraeは汎用 v2と価格も同じであるため汎用 v2としました。
⑦レプリケーション:「ローカル冗長ストレージ(LRS)」を指定しました。
LRSは1つのデータセンターの中でデータを3つに複製する設定です。LRSが最安なのでこちらを指定しました。
⑧アクセス層:「ホット」を指定しました。
ホットは頻繁にデータを読み書きすることにコストが最適かされています。
コールドは長期的にデータを保存し読み書きをあまりしない場合にコストが最適されています。
⑨「次:ネットワーク」を選択します。次はネットワーク接続の設定です。
ネットワークの接続方法を設定する

①接続方法:「パブリックエンドポイント(すべてのネットワーク)」を選択しました。
②「次:詳細」を選択します。次は詳細の設定です。
接続方法とAzure Data Factoryの統合ランタイム(IR)の 関係について
今回はAure Data Factory(ADF)でデータを移動するため、「パブリックエンドポイント(すべてのネットワーク)」 を選択しています。
ADFの仕組みとしてAzure Data Factoryから指令を受けて統合ランタイム(Integration Runtime (IR))というコンピュートが実際にコピーなどの処理を行います。
今回はAzureが管理するAzure IR(マネージドなIR)を使用するため、「すべてのネットワーク」を選択する必要があります。ただし、この場合はインターネットからのアクセスも可能となってしまいます。
「パブリックエンドポイント(選択されたネットワーク)」は仮想ネットワークを指定してストレージへのアクセスを許可することができます。
この場合Azure IRは仮想ネットワークに存在しないのでアクセスできません。
なので、許可した仮想ネットワークに仮想マシンを作成し、セルフホステッド IRをインストールすることでストレージにアクセスすることができるようになります。
「プライベートエンドポイント」はストレージにプライベートIPアドレス付与する項目になります。
セルフホステッドIRをオンプレミスのサーバーにインストールし、そのプライベートIPアドレスまでの経路を確立させることで、閉域網だけでコピーなどの処理を完結させることができます。
詳細設定をする

①安全な転送が必須:「有効」を選択しました。
基本的には有効にしておきましょう。HTTPS通信のみに限定されます。
②大きいファイルの共有:「無効」を選択しました。
今回はFilesを使用しないため無効を選択しました。
有効にした場合Filesのスケールを5GiBから100TiBまで拡張することができます。
③階層構造の名前空間:「有効」を選択しました。
階層構造を有効にすることでフォルダ(ディレクトリ)を作成して階層的にBLOBを配置することができるようになります。
無効の場合は従来の方法と同様フラットな空間にBLOBを配置します。
④ 今回タグは使用しないので「確認および作成」を選択します。
Azure Data Lake Storage Gen2の階層構造の名前空間について
従来のフラットな空間にBLOBを置く場合、BLOB名にスラッシュ(/)を含めることで擬似的にフォルダを表現していました。
そのためフォルダ名の変更を行った場合、そのフォルダ名が含まれるBLOBすべての名前の変更を実施する必要があり、分析処理にものすごく時間がかかっていました。
階層構造の名前空間にすることで分析の処理中に発生するフォルダ名の変更が1回でスピードが上がり、分析のパフォーマンス向上を見込むことができるようになります。
内容を確認しを作成する

内容がよければ「作成」を実行します。
コンテナーを作成する
ストレージアカウントの作成が完了したら、作成したストレージアカウントの管理画面へ遷移し、コンテナーを作成していきます。

①「コンテナー」を選択します。
②「名前」を設定します。今回は「demo-container01」としました。
③「OK」を選択し、コンテナーを作成します。
以上でデータレイクの作成が完了です。続いてAzure Data factoryの作成を行っていきまます。
Azure Data Factoryを作成する
データレイクの準備が完了したら、そこにデータのコピーするためにAzure Data Factoryを作成します。
データファクトリを新規作成する

すべてのサービスから「データ ファクトリ」を選択します。

「+追加」を選択します。基本項目設定画面へ遷移します。
データファクトリの基本項目を設定する

①名前:「ymstech-adf01」と設定しました。
②バージョン:「V2」を選択しました。
基本的に上位互換であるV2を選んでおけば問題ありません。
③サブスクリプション:いつもお使いのものを選択します。
④リソースグループ:デモ用に新規に追加したリソースグループを指定します。
⑤場所:「東日本」としました。
⑥Gitを有効にする:「チェックなし」
チェックを付けるとデータファクトリの各種処理のパイプラインなどをGitで管理することができます。
⑦「作成」を選択し、Azure Data Factoryを作成します。
Azure Data Factoryのパイプラインを作成する
Azure Data Factoryではパイプラインと呼ばれるタスク(処理)を連ねた論理的なグループを作って一連のタスクを実行させます。
今回はコピー処理が1つだけのパイプラインを作っていきます。
Azure Data Factory の管理画面を開く

作成したデータファクトリの管理画面の「作成と監視」を選択します。
Azure Data Factory 専用の管理画面が開きます。

「Copy data」を選択します。パイプラインの構成要素のタスクを作成していきます。
Propertiesの設定をする

①Task name:「LabPipeline」としました。
②Task cadence or task schedule:「Run once now」を選択します。
定期的に実行したい場合は「Run regularly on shedule」を選択します。
③「Next」を選択します。次はSourceの設定を行います。
Sourceを設定する
コピー元のデータセットを作成します。

①「+Create new connection」を選択します。
Azure Data Factoryではデータのコピー元やコピー先をあらかじめデータセットを作成する必要があります。
データセットを作成するにあたり、リンクドサービスを作成して、Azure Data Factoryとデータソースをリンクしておく必要があります。

①「Azure Blob Storage」を選択します。
今回の教材はデータのコピー元をDatabricks社が管理するBlobストレージからデータをコピーするため、こちらを選択します。
②「Continue」を選択し、Linked serviceの詳細設定を行います。

①Name:コピー元のサービス名を「PublicDataset」としました。
②Connect via integration runtime: 「AutoResolveIntegrationRuntime」 選択してAzure IRを使用します。
③Authentication method:「SAS URI」を選択します。
こちらはコピー元のストレージへのアクセス方法を指定できます。今回の教材ではSAS URLが公開されているのでそれを使います。
④「SAS URI」を選択し直接URIを入力します。
⑤SAS URL:「https://databricksdemostore.blob.core.windows.net/」接続先を指定します。
⑥SAS Token:「?sv=2017-11-09&ss=b&srt=sco&sp=rl&se=2099-12-31T17:59:59Z&st=2018-09-22T15:21:51Z&spr=https&sig=LqDcqVNGNEuWILjNJoThzaXktV2N%2BFS354s716RJo80%3D」トークンを設定します。
⑦Test connection:「To linked service」を選択し、接続テストを行います。
⑧「Test connection」を実行します。
⑨が「Connection successful」となることを 確認します。
⑩を選択し、リンクドサービスの作成を完了します。

①作成したリンクドサービス「PublicDataset」を選択します。
②「Next」を選択します。

①「Browse」を指定して、コピーするフォルダを選択します。
教材にはバグにより直接フォルダパスは入力できないと書かれていました。

①「training\crime-data-2016」を選択します。
②「Choose」を選択して確定させます。

①Binary copy:チェックを付けます。今回はバイナリデータ(parquet)をコピーします。
②Compression type:圧縮タイプは「None」とします。
コピー処理中に圧縮や解凍を行うことができますが、今回はNoneとしています。
③Recursively:チェックを付けます。フォルダの中を再帰的にコピーします。
④「Next」を選択し、データデータセットの作成を完了します。
Destinationを設定する
コピー先のデータセットを作成します。

①「+Create new connection」を選択します。

①「Azure Data Lake Storage Gen2」を選択します。
これはコピー先になるので、先に作っておいたストレージアカウントの種類です。
②「Continue」を選択します。

①Name:「ymstechsa01_demo01」としました。
②Connect via integration runtime:「AutoResolveIntegrationRuntime」を選択します。
③Authentication method:「Acount Key」としました。
④Account selection method:「From Azure subscription」を選択します。
これにより、直接キーを入力する必要はなく、プルダウンからストレージアカウント選ぶだけで接続ができます。
⑤Azure subscription:ストレージアカウントが存在するサブスクリプションを選択します。
⑥Storage account name:「ymstechsa01」を選択します。
⑦Test connection:「To linked service」を選択し、接続テストを行います。
⑧「Test connection」を実行します。
⑨が「Connection successful」となることを 確認します。
⑩を選択し、リンクドサービスの作成を完了します。

①作成したリンクドサービス「ymstechsa01_demo01」を選択します。
②「Next」を選択して、データセットの作成を始めます。

①Folder path:「demo-container01」 を選択します。
②Compression type:「None」を選択します。
③Copy behavior:「PreserveHierarchy」を選択します。
コピー元のフォルダ構造をそのままコピーします。ほかに、トップ階層へフラットにファイルを配置する設定や、一つのファイルにマージすることが設定できます。
④「Next」を選択します。

Settingsは特に設定を行わず「Next」を選択します。コピーのサマリが表示されます。
コピーを実行する

Summaryを確認し問題なければ「Next」を選択することでDeploymentへ移行し、その時点でコピー処理が実行されます。

パイプライン(コピー)が正しく完了したか確認します。
「Monitor」を選択します。 パイプラインの実行結果一覧が表示されます 。

①LabPipelineの「view activity runs」のアイコンを選択します。

ACTIONSの「Details」を選択し詳細を見てみます。

西アメリカにある Azure Blob Storage から東日本のAzure Data Lake Storage Gen2にコピーが実行されたことが確認できました。
次に実際にコピーされたデータを見てみます。
データレイクにコピーされたデータを確認する

Azure Portalからストレージアカウント「ymstechsa01」を選択します。

①「Storage Explorer(プレビュー)」を選択します。
②「ファイルシステム」「demo-container01」を選択します。
③コピーされたデータがあることが確認できました。
まとめ

Azure Data Factory におけるデータ インジェスト を題材に データレイクにデータの取り込みを実際にやってみました。
データレイクはストレージアカウントをAzure Data Lake Storage Gen2で作成しました。
次にDataFactoryを作成し、データセットとして送信元と送信先のサービスをリンクドサービスとしてADFとのリンクを作成しました。
Azure Data Factoryはデータの送信元と送信先のデータセットとして作成しました。
パイプラインを実行し、コピーができたことが無事確認数ることができました。
次回はMicrosoft Learnの続きAzure Databricksを使ってデータを整理してみたいと思います。
最後まで読んでいただきありがとうございました。
以上、やましー@データ活用クラウドエンジニア(@yamashi18041)でした。