Memindahkan data dari server FTP menggunakan Azure Data Factory
Catatan
Artikel ini berlaku untuk Data Factory versi 1. Jika Anda menggunakan versi layanan Azure Data Factory saat ini, lihat Konektor FTP di V2.
Artikel ini menjelaskan cara menggunakan aktivitas penyalinan di Azure Data Factory untuk memindahkan data dari server FTP. Ini dibuat pada artikel Aktivitas pergerakan data yang menyajikan ringkasan umum pergerakan data dengan aktivitas penyalinan.
Anda dapat menyalin data dari server FTP ke penyimpanan data sink yang didukung. Untuk daftar penyimpanan data yang didukung sebagai sink oleh aktivitas penyalinan, lihat tabel penyimpanan data yang didukung. Data Factory saat ini hanya mendukung pemindahan data dari server FTP ke penyimpanan data lain, tetapi tidak memindahkan data dari penyimpanan data lain ke tujuan server FTP. Ini mendukung server FTP lokal dan cloud.
Catatan
Aktivitas penyalinan tidak menghapus file sumber setelah berhasil disalin ke tujuan. Jika Anda perlu menghapus file sumber setelah penyalinan berhasil, buat aktivitas kustom untuk menghapus file, dan gunakan aktivitas di alur.
Mengaktifkan konektivitas
Jika Anda memindahkan data dari server FTP lokal ke penyimpanan data cloud (misalnya, ke penyimpanan Azure Blob), instal dan gunakan Data Management Gateway. Data Management Gateway adalah agen klien yang terinstal di komputer lokal Anda, dan memungkinkan layanan cloud untuk menyambungkan ke sumber daya lokal. Untuk detailnya, lihat Data Management Gateway. Untuk instruksi langkah demi langkah tentang menyiapkan gateway dan menggunakannya, lihat Memindahkan data antara lokasi lokal dan cloud. Anda menggunakan gateway untuk menyambungkan ke server FTP, sekalipun jika server berada di infrastruktur Azure sebagai komputer virtual layanan (IaaS) (VM).
Anda dapat menginstal gateway pada komputer lokal yang sama atau IaaS VM sebagai server FTP. Namun, Anda sebaiknya menginstal gateway pada komputer terpisah atau IaaS VM untuk menghindari perebutan sumber daya, dan untuk performa yang lebih baik. Ketika menginstal gateway pada komputer terpisah, komputer harus dapat mengakses server FTP.
Mulai
Anda dapat membuat alur dengan aktivitas penyalinan yang memindahkan data dari sumber FTP menggunakan alat atau API yang berbeda.
Cara termudah untuk membuat alur adalah menggunakan Data Factory Copy Wizard. Lihat Tutorial: Membuat alur menggunakan Copy Wizard untuk panduan singkat.
Anda juga dapat menggunakan alat berikut untuk membuat alur: Visual Studio, PowerShell, templat Azure Resource Manager, .NET API, dan REST API. Lihat Tutorial aktivitas penyalinan untuk instruksi langkah demi langkah guna membuat alur dengan aktivitas penyalinan.
Baik menggunakan alat ataupun API, lakukan langkah-langkah berikut untuk membuat alur yang memindahkan data dari penyimpanan data sumber ke penyimpanan data sink:
- Buat layanan tertaut untuk menautkan penyimpanan data input dan output ke data factory Anda.
- Buat kumpulan data untuk mewakili data input dan output untuk operasi salin.
- Buat jalur dengan aktivitas salinan yang mengambil set data sebagai input dan set data sebagai output.
Saat Anda menggunakan wizard, definisi JSON untuk entitas Data Factory ini (layanan tertaut, himpunan data, dan alur) akan dibuat secara otomatis untuk Anda. Saat menggunakan alat atau API (kecuali .NET API), Anda menentukan entitas Data Factory ini menggunakan format JSON. Untuk sampel dengan definisi JSON untuk entitas Data Factory yang digunakan untuk menyalin data dari penyimpanan data FTP, lihat bagian contoh JSON: Menyalin data dari server FTP ke Azure Blob di artikel ini.
Catatan
Untuk detail tentang format file dan kompresi yang didukung untuk digunakan, lihat Format file dan kompresi di Azure Data Factory.
Bagian berikut ini merupakan detail tentang properti JSON yang digunakan untuk menentukan entitas Azure Data Factory khusus FTP.
Properti layanan tertaut
Tabel berikut ini menjelaskan elemen JSON khusus layanan tertaut FTP.
| Properti | Deskripsi | Diperlukan | Default |
|---|---|---|---|
| jenis | Mengatur ini ke FtpServer. | Ya | |
| host | Menentukan nama atau alamat IP server FTP. | Ya | |
| authenticationType | Menentukan jenis autentikasi. | Ya | Dasar, Anonim |
| username | Menentukan pengguna yang memiliki akses ke server FTP. | Tidak | |
| kata sandi | Menentukan kata sandi untuk pengguna (nama pengguna). | Tidak | |
| encryptedCredential | Menentukan kredensial terenkripsi untuk mengakses server FTP. | Tidak | |
| gatewayName | Menentukan nama gateway di Data Management Gateway untuk menyambungkan ke server FTP lokal. | Tidak | |
| port | Menentukan port tempat server FTP mendengarkan. | Tidak | 21 |
| enableSsl | Menentukan apakah akan menggunakan FTP melalui saluran SSL/TLS. | Tidak | true |
| enableServerCertificateValidation | Menentukan apakah akan mengaktifkan validasi sertifikat TLS/SSL server saat menggunakan FTP melalui saluran SSL/TLS. | Tidak | benar |
Catatan
Konektor FTP mendukung akses server FTP tanpa enkripsi atau enkripsi SSL/TLS eksplisit; tidak mendukung enkripsi SSL/TLS implisit.
Menggunakan Autentikasi anonim
{
"name": "FTPLinkedService",
"properties": {
"type": "FtpServer",
"typeProperties": {
"authenticationType": "Anonymous",
"host": "myftpserver.com"
}
}
}
Menggunakan nama pengguna dan kata sandi dalam teks biasa untuk autentikasi dasar
{
"name": "FTPLinkedService",
"properties": {
"type": "FtpServer",
"typeProperties": {
"host": "myftpserver.com",
"authenticationType": "Basic",
"username": "Admin",
"password": "123456"
}
}
}
Menggunakan port, enableSsl, enableServerCertificateValidation
{
"name": "FTPLinkedService",
"properties": {
"type": "FtpServer",
"typeProperties": {
"host": "myftpserver.com",
"authenticationType": "Basic",
"username": "Admin",
"password": "123456",
"port": "21",
"enableSsl": true,
"enableServerCertificateValidation": true
}
}
}
Menggunakan encryptedCredential untuk autentikasi dan gateway
{
"name": "FTPLinkedService",
"properties": {
"type": "FtpServer",
"typeProperties": {
"host": "myftpserver.com",
"authenticationType": "Basic",
"encryptedCredential": "xxxxxxxxxxxxxxxxx",
"gatewayName": "mygateway"
}
}
}
Properti set data
Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan set data, lihat Membuat set data. Bagian-bagian seperti struktur, ketersediaan, dan kebijakan set data JSON serupa dengan semua jenis set data.
Bagian typeProperties berbeda untuk setiap jenis himpunan data. Ini menyediakan informasi khusus jenis set data. Bagian typeProperties untuk set data dari jenis FileShare memiliki properti berikut:
| Properti | Deskripsi | Diperlukan |
|---|---|---|
| folderPath | Subpath ke folder. Gunakan karakter escape ‘ \ ’ untuk karakter khusus dalam string. Lihat Sampe definisi layanan dan set data yang ditautkan untuk contohnya. Anda dapat menggabungkan properti ini dengan partitionBy untuk memiliki jalur folder berdasarkan irisan waktu mulai/tanggal akhir. |
Ya |
| fileName | Menentukan nama file dalam folderPath jika Anda ingin tabel merujuk ke file tertentu di folder. Jika Anda tidak menentukan nilai apa pun untuk properti ini, tabel akan menunjuk ke semua file dalam folder. Ketika fileName tidak ditentukan untuk set data output, nama file yang dihasilkan memiliki format berikut: Data.<Guid>.txt (Contoh: Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt) |
Tidak |
| fileFilter | Menentukan filter yang akan digunakan untuk memilih subset file di folderPath alih-alih semua file. Nilai yang diizinkan adalah: * (beberapa karakter) dan ? (karakter tunggal).Contoh 1: "fileFilter": "*.log"Contoh 2: "fileFilter": 2014-1-?.txt"fileFilter berlaku untuk set data FileShare input. Properti ini tidak didukung dengan Hadoop Distributed File System (HDFS). |
Tidak |
| partitionedBy | Digunakan untuk menentukan folderPath dan fileName untuk data rangkaian waktu. Misalnya, Anda dapat menentukan folderPath yang digunakan sebagai parameter untuk setiap jam data. | Tidak |
| format | Jenis format berikut didukung: TextFormat, JsonFormat, AvroFormat, OrcFormat, ParquetFormat. Atur properti jenis berdasarkan format ke salah satu nilai ini. Untuk informasi selengkapnya, lihat Bagian Text Format, Json Format, Avro Format, Orc Format, and Parquet Format. Jika ingin menyalin file sebagaimana adanya antara penyimpanan berbasis file (salinan biner), lewati bagian format dalam definisi set data input dan output. |
Tidak |
| compression | Menentukan jenis dan tingkat kompresi untuk data. Jenis yang didukung adalah: GZip, Deflate, BZip2, dan ZipDeflate, dan level yang didukung adalah Optimal serta Fastest. Untuk informasi selengkapnya, lihat Format file dan kompresi di Azure Data Factory. | Tidak |
| useBinaryTransfer | Menentukan apakah akan menggunakan mode transfer biner. Nilai tersebut berlaku untuk mode biner (ini adalah nilai default), dan false untuk ASCII. Properti ini hanya dapat digunakan ketika jenis layanan tertaut terkait berdasarkan jenisnya: FtpServer. | Tidak |
Catatan
fileName dan fileFilter tidak dapat digunakan secara bersamaan.
Menggunakan properti partionedBy
Seperti disebutkan di bagian sebelumnya, Anda dapat menentukan folderPath dan fileName dinamis untuk data rangkaian waktu dengan properti partitionedB.
Untuk mempelajari tentang set data, penjadwalan, dan irisan rangkaian waktu, lihat Membuat set data, Penjadwalan dan eksekusi, dan Membuat alur.
Contoh 1
"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
{ "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],
Dalam contoh ini, {Slice} diganti dengan nilai variabel sistem Data Factory SliceStart, dalam format yang ditentukan (YYYYMMDDHH). SliceStart mengacu pada waktu mulai irisan. Jalur folder berbeda untuk setiap irisan. (Misalnya, wikidatagateway/wikisampledataout/2014100103 atau wikidatagateway/wikisampledataout/2014100104.)
Contoh 2
"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"partitionedBy":
[
{ "name": "Year", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy" } },
{ "name": "Month", "value": { "type": "DateTime", "date": "SliceStart", "format": "MM" } },
{ "name": "Day", "value": { "type": "DateTime", "date": "SliceStart", "format": "dd" } },
{ "name": "Hour", "value": { "type": "DateTime", "date": "SliceStart", "format": "hh" } }
],
Dalam contoh ini, tahun, bulan, hari, dan waktu SliceStart diekstrak ke dalam variabel terpisah yang digunakan oleh folderPath dan properti fileName.
Properti aktivitas penyalinan
Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan aktivitas, lihat Membuat alur. Properti JSON seperti nama, deskripsi, tabel input dan output, dan kebijakan tersedia untuk semua jenis aktivitas.
Di sisi lain, properti yang tersedia di bagian typeProperties aktivitas bervariasi menurut setiap jenis aktivitas. Untuk aktivitas penyalinan, properti jenis bervariasi bergantung pada jenis sumber dan sink.
Dalam aktivitas salin, ketika sumber berasal dari jenis FileSystemSource, properti berikut ini tersedia di bagian typeProperties:
| Properti | Deskripsi | Nilai yang diizinkan | Diperlukan |
|---|---|---|---|
| recursive | Menunjukkan apakah data dibaca secara berulang dari subfolder atau hanya dari folder yang ditentukan. | True, False (default) | Tidak |
Contoh JSON: Menyalin data dari server FTP ke Azure Blob
Contoh ini menunjukkan cara menyalin data dari server FTP ke penyimpanan Azure Blob. Namun, data dapat disalin langsung ke salah satu sink yang dinyatakan dalam penyimpanan data dan format yang didukung menggunakan aktivitas salin di Data Factory.
Contoh berikut ini merupakan definisi JSON sampel yang dapat Anda gunakan untuk membuat alur menggunakan Visual Studio atau Azure PowerShell:
- Layanan tertaut jenis FtpServer
- Layanan tertaut jenis AzureStorage
- Set data input dari jenis FileShare
- Set data output dari jenis AzureBlob
- Alur dengan aktivitas penyalinan yang menggunakan FileSystemSource dan BlobSink
Sampel menyalin data dari server FTP ke blob Azure setiap jam. Properti JSON yang digunakan dalam sampel ini dijelaskan dalam beberapa bagian setelah sampel.
Layanan tertaut FTP
Contoh ini menggunakan autentikasi dasar, dengan nama pengguna dan kata sandi dalam teks biasa. Anda dapat menggunakan salah satu cara berikut ini:
- Autentikasi anonim
- Autentikasi dasar dengan kredensial terenkripsi
- FTP melalui SSL/TLS (FTPS)
Lihat bagian Layanan tertaut FTP untuk berbagai jenis autentikasi yang dapat Anda gunakan.
{
"name": "FTPLinkedService",
"properties": {
"type": "FtpServer",
"typeProperties": {
"host": "myftpserver.com",
"authenticationType": "Basic",
"username": "Admin",
"password": "123456"
}
}
}
Layanan tertaut Azure Storage
{
"name": "AzureStorageLinkedService",
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
}
}
}
Set data input FTP
Set data ini mengacu pada folder FTP mysharedfolder dan file test.csv. Alur menyalin file ke tujuan.
Mengatur eksternal ke true menginformasikan layanan Data Factory bahwa set data bersifat eksternal dan tidak diproduksi oleh aktivitas di data factory.
{
"name": "FTPFileInput",
"properties": {
"type": "FileShare",
"linkedServiceName": "FTPLinkedService",
"typeProperties": {
"folderPath": "mysharedfolder",
"fileName": "test.csv",
"useBinaryTransfer": true
},
"external": true,
"availability": {
"frequency": "Hour",
"interval": 1
}
}
}
Set data output Azure Blob
Data ditulis ke blob baru setiap jam (frekuensi: jam, interval: 1). Jalur folder untuk blob dievaluasi secara dinamis berdasarkan waktu mulai irisan yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, hari, dan jam dari waktu mulai.
{
"name": "AzureBlobOutput",
"properties": {
"type": "AzureBlob",
"linkedServiceName": "AzureStorageLinkedService",
"typeProperties": {
"folderPath": "mycontainer/ftp/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
"format": {
"type": "TextFormat",
"rowDelimiter": "\n",
"columnDelimiter": "\t"
},
"partitionedBy": [
{
"name": "Year",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "yyyy"
}
},
{
"name": "Month",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "MM"
}
},
{
"name": "Day",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "dd"
}
},
{
"name": "Hour",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "HH"
}
}
]
},
"availability": {
"frequency": "Hour",
"interval": 1
}
}
}
Aktivitas salinan dalam alur dengan sumber sistem file dan sink blob
Alur berisi aktivitas penyalinan yang dikonfigurasi untuk menggunakan set data input dan output dan dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, jenis sumber diatur ke FileSystemSource dan jenis sink diatur ke BlobSink.
{
"name": "pipeline",
"properties": {
"activities": [{
"name": "FTPToBlobCopy",
"inputs": [{
"name": "FtpFileInput"
}],
"outputs": [{
"name": "AzureBlobOutput"
}],
"type": "Copy",
"typeProperties": {
"source": {
"type": "FileSystemSource"
},
"sink": {
"type": "BlobSink"
}
},
"scheduler": {
"frequency": "Hour",
"interval": 1
},
"policy": {
"concurrency": 1,
"executionPriorityOrder": "NewestFirst",
"retry": 1,
"timeout": "00:05:00"
}
}],
"start": "2016-08-24T18:00:00Z",
"end": "2016-08-24T19:00:00Z"
}
}
Catatan
Untuk memetakan kolom dari set data sumber ke kolom dari set data sink, lihat Memetakan kolom set data di Azure Data Factory.
Langkah berikutnya
Lihat artikel berikut ini:
Untuk mempelajari tentang faktor-faktor utama yang memengaruhi kinerja perpindahan data (aktivitas penyalinan) di Azure Data Factory dan berbagai cara untuk mengoptimalkannya, lihat Kinerja dan panduan pengaturan aktivitas penyalinan.
Untuk instruksi langkah demi langkah dalam membuat alur dengan aktivitas penyalinan, lihat Tutorial aktivitas penyalinan.