Azure Data Factory または Azure Synapse Analytics を使用して FTP サーバーからデータをコピーする
適用対象: Azure Data Factory Azure Synapse Analytics
ヒント
企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。
この記事では、FTP サーバーからデータをコピーする方法について説明します。 詳細については、Azure Data Factory および Azure Synapse Analytics の概要記事を参照してください。
サポートされる機能
この FTP コネクタは、次の機能でサポートされます。
サポートされる機能 | IR |
---|---|
Copy アクティビティ (ソース/-) | ① ② |
Lookup アクティビティ | ① ② |
GetMetadata アクティビティ | ① ② |
アクティビティを削除する | ① ② |
① Azure 統合ランタイム ② セルフホステッド統合ランタイム
具体的には、この FTP コネクタは以下をサポートします。
- 基本または匿名認証を使用したファイルのコピー。
- ファイルをそのままコピーするか、サポートされているファイル形式と圧縮コーデックを使用したファイルの解析。
FTP コネクタは、パッシブ モードで実行されている FTP サーバーをサポートしています。 アクティブ モードはサポートされていません。
前提条件
データ ストアがオンプレ ミスネットワーク、Azure 仮想ネットワーク、または Amazon Virtual Private Cloud 内にある場合は、それに接続するようセルフホステッド統合ランタイムを構成する必要があります。
データ ストアがマネージド クラウド データ サービスである場合は、Azure Integration Runtime を使用できます。 ファイアウォール規則で承認されている IP にアクセスが制限されている場合は、Azure Integration Runtime の IP を許可リストに追加できます。
また、Azure Data Factory のマネージド仮想ネットワーク統合ランタイム機能を使用すれば、セルフホステッド統合ランタイムをインストールして構成しなくても、オンプレミス ネットワークにアクセスすることができます。
Data Factory によってサポートされるネットワーク セキュリティ メカニズムやオプションの詳細については、「データ アクセス戦略」を参照してください。
はじめに
パイプラインでコピー アクティビティを実行するには、次のいずれかのツールまたは SDK を使用します。
UI を使用して FTP サーバーのリンク サービスを作成する
次の手順を使用して、Azure portal UI で FTP サーバーのリンク サービスを作成します。
Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンク サービス] を選択して、[新規] をクリックします。
FTP を検索し、FTP コネクタを選択します。
サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。
コネクタの構成の詳細
以下のセクションでは、FTP に固有のエンティティの定義に使用されるプロパティについて詳しく説明します。
リンクされたサービスのプロパティ
FTP のリンクされたサービスでは、次のプロパティがサポートされます。
プロパティ | 内容 | 必須 |
---|---|---|
type | type プロパティは、次のように設定する必要があります:FtpServer。 | はい |
host | FTP サーバーの名前または IP アドレスを指定します。 | はい |
port | FTP サーバーがリッスンしているポートを指定します。 使用可能な値: 整数。既定値は 21。 |
いいえ |
enableSsl | SSL/TLS チャネル上の FTP を使用するかどうかを指定します。 使用可能な値: true (既定値)、false。 |
いいえ |
enableServerCertificateValidation | FTP over SSL/TLS チャネルを使用しているときにサーバーの TLS/SSL 証明書の検証を有効にするかどうかを指定します。 使用可能な値: true (既定値)、false。 |
いいえ |
authenticationType | 認証の種類を指定します。 使用できる値は、以下のとおりです。BasicAnonymous |
はい |
userName | FTP サーバーへのアクセスを持つユーザーを指定します。 | いいえ |
password | ユーザー (username) のパスワードを指定します。 このフィールドを SecureString とマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します。 | いいえ |
connectVia | データ ストアに接続するために使用される統合ランタイム。 詳細については、「前提条件」セクションを参照してください。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 | いいえ |
注意
FTP コネクタでは、暗号化なしまたは明示的な SSL/TLS 暗号化での FTP サーバーへのアクセスがサポートされています。暗黙的な SSL/TLS 暗号化はサポートされていません。
例 1: 匿名認証の使用
{
"name": "FTPLinkedService",
"properties": {
"type": "FtpServer",
"typeProperties": {
"host": "<ftp server>",
"port": 21,
"enableSsl": true,
"enableServerCertificateValidation": true,
"authenticationType": "Anonymous"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
例 2: 基本認証の使用
{
"name": "FTPLinkedService",
"properties": {
"type": "FtpServer",
"typeProperties": {
"host": "<ftp server>",
"port": 21,
"enableSsl": true,
"enableServerCertificateValidation": true,
"authenticationType": "Basic",
"userName": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
データセットのプロパティ
データセットを定義するために使用できるセクションとプロパティの完全な一覧については、データセットに関する記事をご覧ください。
Azure Data Factory では次のファイル形式がサポートされます。 形式ベースの設定については、各記事を参照してください。
FTP では、形式ベースのデータセットの location
設定において、次のプロパティがサポートされています。
プロパティ | 内容 | 必須 |
---|---|---|
type | データセットの location の type プロパティは、FtpServerLocation に設定する必要があります。 |
はい |
folderPath | フォルダーのパス。 フォルダーをフィルター処理するためにワイルドカードを使用する場合は、この設定をスキップし、アクティビティのソースの設定で指定します。 | いいえ |
fileName | 特定の folderPath の下のファイル名。 ファイルをフィルター処理するためにワイルドカードを使用する場合は、この設定をスキップし、アクティビティのソースの設定で指定します。 | いいえ |
例:
{
"name": "DelimitedTextDataset",
"properties": {
"type": "DelimitedText",
"linkedServiceName": {
"referenceName": "<FTP linked service name>",
"type": "LinkedServiceReference"
},
"schema": [ < physical schema, optional, auto retrieved during authoring > ],
"typeProperties": {
"location": {
"type": "FtpServerLocation",
"folderPath": "root/folder/subfolder"
},
"columnDelimiter": ",",
"quoteChar": "\"",
"firstRowAsHeader": true,
"compressionCodec": "gzip"
}
}
}
コピー アクティビティのプロパティ
アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。 このセクションでは、FTP ソースでサポートされるプロパティの一覧を示します。
ソースとしての FTP
Azure Data Factory では次のファイル形式がサポートされます。 形式ベースの設定については、各記事を参照してください。
FTP では、形式ベースのコピー ソースの storeSettings
設定において、次のプロパティがサポートされています。
プロパティ | 内容 | 必須 |
---|---|---|
type | storeSettings の type プロパティは FtpReadSettings に設定する必要があります。 |
はい |
コピーするファイルを特定する: | ||
オプション 1: 静的パス |
データセットに指定されている所定のフォルダーまたはファイル パスからコピーします。 フォルダーからすべてのファイルをコピーする場合は、さらに * として wildcardFileName を指定します。 |
|
オプション 2: ワイルドカード - wildcardFolderPath |
ソース フォルダーをフィルター処理するための、ワイルドカード文字を含むフォルダー パス。 使用できるワイルドカーは、 * (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。実際のフォルダー名にワイルドカードまたはこのエスケープ文字が含まれている場合は、^ を使用してエスケープします。 「フォルダーとファイル フィルターの例」の他の例をご覧ください。 |
いいえ |
オプション 2: ワイルドカード - wildcardFileName |
ソース ファイルをフィルター処理するための、特定の folderPath/wildcardFolderPath の下のワイルドカード文字を含むファイル名。 使用できるワイルドカーは、 * (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。実際のファイル名にワイルドカードまたはこのエスケープ文字が含まれている場合は、^ を使用してエスケープします。 「フォルダーとファイル フィルターの例」の他の例をご覧ください。 |
はい |
オプション 3: ファイルの一覧 - fileListPath |
指定されたファイル セットをコピーすることを示します。 コピーするファイルの一覧を含むテキスト ファイルをポイントします。データセットで構成されているパスへの相対パスであるファイルを 1 行につき 1 つずつ指定します。 このオプションを使用する場合は、データ セットにファイル名を指定しないでください。 その他の例については、ファイル リストの例を参照してください。 |
いいえ |
追加の設定: | ||
recursive | データをサブフォルダーから再帰的に読み取るか、指定したフォルダーからのみ読み取るかを指定します。 recursive が true に設定され、シンクがファイル ベースのストアである場合、空のフォルダーおよびサブフォルダーはシンクでコピーも作成もされないことに注意してください。 使用可能な値: true (既定値) および false。 fileListPath を構成する場合、このプロパティは適用されません。 |
いいえ |
deleteFilesAfterCompletion | 宛先ストアに正常に移動した後、バイナリ ファイルをソース ストアから削除するかどうかを示します。 ファイルの削除はファイルごとに行われるので、コピー操作が失敗した場合、一部のファイルが既に宛先にコピーされソースからは削除されているが、他のファイルはまだソース ストアに残っていることがわかります。 このプロパティは、バイナリ ファイルのコピー シナリオでのみ有効です。 既定値: false。 |
いいえ |
useBinaryTransfer | バイナリ転送モードを使用するかどうかを指定します。 値は、バイナリ モードの場合は true (既定値)、ASCII の場合は false です。 | いいえ |
enablePartitionDiscovery | パーティション分割されているファイルの場合は、ファイル パスのパーティションを解析し、それを追加のソース列として追加するかどうかを指定します。 指定できる値は false (既定値) と true です。 |
いいえ |
partitionRootPath | パーティション検出が有効になっている場合は、パーティション分割されたフォルダーをデータ列として読み取るための絶対ルート パスを指定します。 これが指定されていない場合は、既定で次のようになります。 - ソース上のデータセットまたはファイルの一覧内のファイル パスを使用する場合、パーティションのルート パスはそのデータセットで構成されているパスです。 - ワイルドカード フォルダー フィルターを使用する場合、パーティションのルート パスは最初のワイルドカードの前のサブパスです。 たとえば、データセット内のパスを "root/folder/year=2020/month=08/day=27" として構成するとします。 - パーティションのルート パスを "root/folder/year=2020" として指定した場合は、コピー アクティビティによって、ファイル内の列とは別に、それぞれ "08" と "27" の値を持つ month と day という 2 つの追加の列が生成されます。- パーティションのルート パスが指定されない場合、追加の列は生成されません。 |
いいえ |
maxConcurrentConnections | アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。 | No |
disableChunking | FTP からデータをコピーする際、このサービスは、まずファイル長の取得を試み、次にファイルを複数の部分に分割して、並列で読み取ります。 FTP サーバーで、ファイル長の取得、または特定のオフセットから読み取るためのシークがサポートされているかどうかを指定します。 指定できる値は false (既定値)、true です。 |
いいえ |
例:
"activities":[
{
"name": "CopyFromFTP",
"type": "Copy",
"inputs": [
{
"referenceName": "<Delimited text input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "DelimitedTextSource",
"formatSettings":{
"type": "DelimitedTextReadSettings",
"skipLineCount": 10
},
"storeSettings":{
"type": "FtpReadSettings",
"recursive": true,
"wildcardFolderPath": "myfolder*A",
"wildcardFileName": "*.csv",
"disableChunking": false
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
フォルダーとファイル フィルターの例
このセクションでは、ワイルドカード フィルターを使用した結果のフォルダーのパスとファイル名の動作について説明します。
folderPath | fileName | recursive | ソースのフォルダー構造とフィルターの結果 (太字のファイルが取得されます) |
---|---|---|---|
Folder* |
(空、既定値を使用) | false | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
Folder* |
(空、既定値を使用) | true | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
Folder* |
*.csv |
false | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
Folder* |
*.csv |
true | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
ファイル リストの例
このセクションでは、コピー アクティビティのソースでファイル リスト パスを使用した結果の動作について説明します。
次のソース フォルダー構造があり、太字のファイルをコピーするとします。
サンプルのソース構造 | FileListToCopy.txt のコンテンツ | 構成 |
---|---|---|
root FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv メタデータ FileListToCopy.txt |
File1.csv Subfolder1/File3.csv Subfolder1/File5.csv |
データセット内: - フォルダー パス: root/FolderA コピー アクティビティ ソース内: - ファイル リストのパス: root/Metadata/FileListToCopy.txt ファイル リストのパスは、コピーするファイルの一覧を含む同じデータストア内のテキスト ファイルをポイントします。データセットで構成されているパスへの相対パスで 1 行につき 1 つのファイルを指定します。 |
Lookup アクティビティのプロパティ
プロパティの詳細については、Lookup アクティビティに関するページを参照してください。
GetMetadata アクティビティのプロパティ
プロパティの詳細については、GetMetadata アクティビティに関するページを参照してください。
Delete アクティビティのプロパティ
プロパティの詳細については、Delete アクティビティに関するページを参照してください。
レガシ モデル
注意
次のモデルは、下位互換性のために引き続きそのままサポートされます。 今後は、上記のセクションで説明した新しいモデルを使用することをお勧めします。作成 UI は、新しいモデルを生成するように切り替えられています。
レガシ データセット モデル
プロパティ | 内容 | 必須 |
---|---|---|
type | データセットの type プロパティは、次のように設定する必要があります:FileShare | はい |
folderPath | フォルダーへのパス。 ワイルドカード フィルターがサポートされています。使用できるワイルドカードは、* (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。実際のフォルダー名にワイルドカードまたはこのエスケープ文字が含まれている場合は、^ を使用してエスケープします。 例: ルートフォルダー/サブフォルダー。「フォルダーとファイル フィルターの例」の例を参照してください。 |
はい |
fileName | 指定された "folderPath" の下にあるファイルの名前またはワイルドカード フィルター。 このプロパティの値を指定しない場合、データセットはフォルダー内のすべてのファイルをポイントします。 フィルターに使用できるワイルドカードは、 * (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。- 例 1: "fileName": "*.csv" - 例 2: "fileName": "???20180427.txt" 実際のファイル名にワイルドカードまたはこのエスケープ文字が含まれている場合は、 ^ を使用してエスケープします。 |
いいえ |
format | ファイルベースのストア間でファイルをそのままコピー (バイナリ コピー) する場合は、入力と出力の両方のデータセット定義で format セクションをスキップします。 特定の形式のファイルを解析する場合にサポートされるファイル形式の種類は、TextFormat、JsonFormat、AvroFormat、OrcFormat、ParquetFormat です。 形式の type プロパティをいずれかの値に設定します。 詳細については、Text Format、Json Format、Avro Format、Orc Format、Parquet Format の各セクションを参照してください。 |
いいえ (バイナリ コピー シナリオのみ) |
compression | データの圧縮の種類とレベルを指定します。 詳細については、サポートされるファイル形式と圧縮コーデックに関する記事を参照してください。 サポートされる種類は、GZip、Deflate、BZip2、ZipDeflate です。 サポートされるレベルは、Optimal と Fastest です。 |
いいえ |
useBinaryTransfer | バイナリ転送モードを使用するかどうかを指定します。 値は、バイナリ モードの場合は true (既定値)、ASCII の場合は false です。 | いいえ |
ヒント
フォルダーの下のすべてのファイルをコピーするには、folderPath のみを指定します。
特定の名前の単一のファイルをコピーするには、フォルダー部分で folderPath、ファイル名で fileName を指定します。
フォルダーの下のファイルのサブセットをコピーするには、フォルダー部分で folderPath、ワイルドカード フィルターで fileName を指定します。
注意
ファイル フィルターで "fileFilter" プロパティを使用していた場合は、そのまま引き続きサポートされますが、今後は "fileName" に追加された新しいフィルター機能を使用することをお勧めします。
例:
{
"name": "FTPDataset",
"properties": {
"type": "FileShare",
"linkedServiceName":{
"referenceName": "<FTP linked service name>",
"type": "LinkedServiceReference"
},
"typeProperties": {
"folderPath": "folder/subfolder/",
"fileName": "myfile.csv.gz",
"format": {
"type": "TextFormat",
"columnDelimiter": ",",
"rowDelimiter": "\n"
},
"compression": {
"type": "GZip",
"level": "Optimal"
}
}
}
}
レガシ コピー アクティビティ ソース モデル
プロパティ | 内容 | 必須 |
---|---|---|
type | コピー アクティビティのソースの type プロパティは、次のように設定する必要があります:FileSystemSource | はい |
recursive | データをサブ フォルダーから再帰的に読み取るか、指定したフォルダーからのみ読み取るかを指定します。 recursive が true に設定され、シンクがファイル ベースのストアである場合、空のフォルダー/サブフォルダーはシンクでコピー/作成されないことに注意してください。 使用可能な値: true (既定値)、false |
いいえ |
maxConcurrentConnections | アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。 | いいえ |
例:
"activities":[
{
"name": "CopyFromFTP",
"type": "Copy",
"inputs": [
{
"referenceName": "<FTP input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "FileSystemSource",
"recursive": true
},
"sink": {
"type": "<sink type>"
}
}
}
]
関連するコンテンツ
Copy アクティビティでソースおよびシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。