使用 Azure Data Factory 或 Synapse Analytics 從 FTP 伺服器複製資料

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用

本文概述如何從 FTP 伺服器複製資料。 若想深入了解,請閱讀 Azure Data FactorySynapse Analytics 的介紹文章。

支援的功能

此 FTP 連接器支援下列功能:

支援的功能 IR
複製活動 (來源/-) ① ②
查閱活動 ① ②
GetMetadata 活動 ① ②
刪除活動 ① ②

① Azure 整合執行階段 ② 自我裝載整合執行階段

具體而言,此 FTP 連接器支援:

FTP 連接器支援在被動模式中執行的 FTP 伺服器。 不支援主動模式。

必要條件

如果您的資料存放區位於內部部署網路、Azure 虛擬網路或 Amazon 虛擬私人雲端中,則必須設定自我裝載整合執行階段以與其連線。

如果您的資料存放區是受控雲端資料服務,則可使用 Azure Integration Runtime。 如果只能存取防火牆規則中核准的 IP,您可以將 Azure Integration Runtime IP 新增至允許清單。

您也可以使用 Azure Data Factory 中的受控虛擬網路整合執行階段功能來存取內部部署網路,而不需要安裝和設定自我裝載整合執行階段。

如需 Data Factory 支援的網路安全性機制和選項的詳細資訊,請參閱資料存取策略

開始使用

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立與 FTP 伺服器的連結服務

使用下列步驟,在 Azure 入口網站 UI 中建立連結至 FTP 伺服器的服務。

  1. 前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 FTP,然後選取 FTP 連接器。

    Screenshot of the FTP connector.

  3. 設定服務詳細資料,測試連線,然後建立新的連結服務。

    Screenshot of linked service configuration for an FTP server.

連接器設定詳細資料

下列各節提供屬性的相關詳細資料,這些屬性用來定義 FTP 專屬的實體。

連結服務屬性

以下是針對 FTP 連結服務支援的屬性:

屬性 描述 必要
type 類型屬性必須設定為:FtpServer Yes
host 指定 FTP 伺服器的名稱或 IP 位址。 Yes
port 指定 FTP 伺服器所接聽的連接埠
允許的值為:整數,預設值為 21
No
enableSsl 指定是否使用透過 SSL/TLS 的 FTP 通道。
允許的值為:true (預設值)、false
No
enableServerCertificateValidation 指定是否在使用透過 TLS/SSL 的 FTP 通道時啟用伺服器 TLS/SSL 憑證驗證。
允許的值為:true (預設值)、false
No
authenticationType 指定驗證類型。
允許的值為:基本匿名
Yes
userName 指定擁有 FTP 伺服器存取權限的使用者。 No
password 指定使用者 (使用者名稱) 的密碼。 將此欄位標記為 SecureString 以便安全儲存,或參考 Azure Key Vault 中儲存的祕密 No
connectVia 用於連線到資料存放區的 Integration Runtime。 深入了解必要條件一節。 如果未指定,就會使用預設的 Azure Integration Runtime。 No

注意

FTP 連接器支援以未加密或明確的 SSL/TLS 加密方式存取 FTP 伺服器;它不支援隱含的 SSL/TLS 加密。

範例 1:使用 Anonymous (匿名) 驗證

{
    "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:使用 Basic (基本) 驗證

{
    "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 支援下列檔案格式。 請參閱每篇文章,以取得以格式為基礎的設定。

在格式型資料集內的 location 設定下,FTP 支援下列屬性:

屬性 描述 必要
type 資料集內 location 之下的 type 屬性必須設定為 FtpServerLocation Yes
folderPath 資料夾的路徑。 如果您想要使用萬用字元來篩選資料夾,請略過此設定,並在活動來源設定中指定。 No
fileName 所指定 folderPath 下方的檔案名稱。 如果您想要使用萬用字元來篩選檔案,請略過此設定,並在活動來源設定中指定。 No

範例:

{
    "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 支援下列檔案格式。 請參閱每篇文章,以取得以格式為基礎的設定。

在格式型複製來源內 storeSettings 設定下,FTP 支援下列屬性:

屬性 描述 必要
type storeSettings 下的 type 屬性必須設定為 FtpReadSettings Yes
找到要複製的檔案:
選項 1:靜態路徑
請從資料集內的指定資料夾/檔案路徑複製。 如果您想要複製資料夾中的所有檔案,請另外將 wildcardFileName 指定為 *
選項 2:萬用字元
- wildcardFolderPath
含有萬用字元的資料夾路徑,可用來篩選來源資料夾。
允許的萬用字元為:* (比對零或多個字元) 和 ? (比對零或單一字元);如果您的實際資料夾名稱包含萬用字元或此逸出字元,請使用 ^ 來逸出。
如需更多範例,請參閱資料夾和檔案篩選範例
No
選項 2:萬用字元
- wildcardFileName
在特定 folderPath/wildcardFolderPath 下含有萬用字元的檔案名稱,用於篩選來源檔案。
允許的萬用字元為:* (比對零或多個字元) 和 ? (比對零或單一字元);如果您的實際檔案名稱包含萬用字元或此逸出字元,請使用 ^ 來逸出。 如需更多範例,請參閱資料夾和檔案篩選範例
Yes
選項 3:檔案清單
- fileListPath
表示要複製指定的檔案集。 指向含有所要複製檔案清單的文字檔,一行一個檔案,而這是資料集中所設定路徑的相對路徑。
使用此選項時,請勿指定資料集中的檔案名稱。 檔案清單範例有更多範例可供參閱。
No
其他設定:
遞迴 指出是否從子資料夾、或只有從指定的資料夾,以遞迴方式讀取資料。 請注意,當遞迴設定為 true 且接收是檔案型存放區時,就不會在接收上複製或建立空的資料夾或子資料夾。
允許的值為 true (預設值) 和 false
設定 fileListPath 時,此屬性不適用。
No
deleteFilesAfterCompletion 指出成功移至目的地存放區之後,是否要從來源存放區中刪除二進位檔案。 檔案刪除會針對每個檔案執行,因此,當複製活動失敗時,您會看到已將某些檔案複製到目的地,而且已從來源刪除,而其他檔案仍保留在來源存放區上。
此屬性僅適用於二進位檔案複製案例。 預設值:false。
No
useBinaryTransfer 指定是否使用二進位傳輸模式。 值對二進位模式為真 (預設值),對 ASCII 則為假。 No
enablePartitionDiscovery 針對已分割的檔案,指定是否要從檔案路徑剖析分割區,並將其新增為其他來源資料行。
允許的值為 false (預設值) 和 true
No
partitionRootPath 啟用分割區探索時,請指定絕對根路徑,將已分割的資料夾當成資料行進行讀取。

如果未指定,則根據預設,
- 當您使用資料集中的檔案路徑或來源上的檔案清單時,分割區根路徑是資料集中所設定的路徑。
- 當您使用萬用字元資料夾篩選時,分割區根路徑是第一個萬用字元前面的子路徑。

例如,假設您將資料集中的路徑設定為 "root/folder/year=2020/month=08/day=27":
- 如果您將分割區根路徑指定為 "root/folder/year=2020",則除了檔案內的資料行之外,複製活動還會分別產生值為 "08" 和 "27" 的兩個資料行 monthday
- 如果未指定分割區根路徑,則不會產生額外的資料行。
No
maxConcurrentConnections 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。 No
disableChunking 從 FTP 複製資料時,服務會先嘗試取得檔案長度,然後將檔案分成多個部分,接著平行讀取。 指定您的 FTP 伺服器是否支援取得檔案長度,或需要從特定位移讀取。
允許的值為 false (預設值) 和 true
No

範例:

"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 遞迴 來源資料夾結構和篩選結果 (會擷取以粗體顯示的檔案)
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 中的內容 組態

    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

檔案清單路徑指向同個資料存放區內的文字檔,內有所要複製的檔案清單,每行一個檔案,使用資料集內設定路徑的相對路徑。

查詢活動屬性

若要了解屬性的詳細資料,請參閱查閱活動

GetMetadata 活動屬性

若要了解關於屬性的詳細資料,請參閱 GetMetadata 活動

刪除活動屬性

若要了解關於屬性的詳細資料,請參閱刪除活動

舊版模型

注意

基於回溯相容性,仍照現狀支援下列模型。 建議您繼續使用以上各節所述的新模型,且製作 UI 已切換為產生新模型。

舊版資料集模型

屬性 描述 必要
type 資料集的類型屬性必須設定為:FileShare Yes
folderPath 資料夾的路徑。 支援萬用字元篩選,允許的萬用字元為:* (比對零或多個字元) 和 ? (比對零或單一字元);如果您的實際資料夾名稱包含萬用字元或此逸出字元,請使用 ^ 來逸出。

範例:rootfolder/subfolder/,如需更多範例,請參閱資料夾和檔案篩選範例
Yes
fileName 在指定 "folderPath" 之下檔案的名稱或萬用字元篩選。 若未指定此屬性的值,資料集就會指向資料夾中的所有檔案。

針對篩選,允許的萬用字元為:* (符合零或多個字元) 和 ? (符合零或單一字元)。
- 範例 1:"fileName": "*.csv"
- 範例 2:"fileName": "???20180427.txt"
如果實際檔案名稱內有萬用字元或逸出字元 ^,請使用此逸出字元來逸出。
No
format 如果您想要在以檔案為基礎的存放區之間依原樣複製檔案 (二進位複本),請在輸入和輸出資料集定義中略過格式區段。

如果您想要以特定格式來剖析檔案,以下是支援的檔案格式類型:TextFormatJsonFormatAvroFormatOrcFormatParquetFormat。 將格式下的 type 屬性設定為這些值其中之一。 如需詳細資訊,請參閱文字格式Json 格式Avro 格式Orc 格式Parquet 格式章節。
否 (僅適用於二進位複製案例)
壓縮 指定此資料的壓縮類型和層級。 如需詳細資訊,請參閱支援的檔案格式和壓縮轉碼器
支援的類型為:GZipDeflateBZip2ZipDeflate
支援的層級為:OptimalFastest
No
useBinaryTransfer 指定是否使用二進位傳輸模式。 值對二進位模式為真 (預設值),對 ASCII 則為假。 No

提示

若要複製資料夾下的所有檔案,請只指定 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 複製活動來源的類型屬性必須設定為:FileSystemSource Yes
遞迴 表示是否從子資料夾,或只有從指定的資料夾,以遞迴方式讀取資料。 請注意,當 recursive 設定為 true,而接收器為檔案型存放區時,系統不會在接收器複製/建立空資料夾/子資料夾。
允許的值為:true (預設值)、false
No
maxConcurrentConnections 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。 No

範例:

"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>"
            }
        }
    }
]

如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區