Memindahkan data dari server SFTP menggunakan Azure Data Factory
Catatan
Artikel ini berlaku untuk versi 1 dari Azure Data Factory. Jika Anda menggunakan versi layanan Data Factory saat ini, lihat SFTPconnector di V2.
Artikel ini menguraikan cara menggunakan Aktivitas Salin di Azure Data Factory untuk memindahkan data dari server SFTP lokal/cloud ke penyimpanan data sink yang didukung. Artikel ini dibangun berdasarkan artikel aktivitas pergerakan data yang menyajikan gambaran umum pergerakan data dengan aktivitas salin dan daftar penyimpanan data yang didukung sebagai sumber/sink.
Data Factory saat ini hanya mendukung pemindahan data dari server SFTP ke penyimpanan data lain, tetapi tidak untuk memindahkan data dari penyimpanan data lain ke server SFTP. Ini mendukung server SFTP lokal dan cloud.
Catatan
Aktivitas Salin 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.
Skenario dan jenis autentikasi yang didukung
Anda dapat menggunakan konektor SFTP ini untuk menyalin data dari server SFTP cloud dan server SFTP lokal. Jenis autentikasi Dasar dan SshPublicKey didukung saat menyambung ke server SFTP.
Saat menyalin data dari server SFTP lokal, Anda memerlukan instalasi Data Management Gateway di lingkungan lokal/Azure VM. Lihat Data Management Gateway untuk detail di gateway. Lihat memindahkan data antara lokasi lokal dan artikel cloud untuk instruksi langkah demi langkah tentang mengatur gateway dan menggunakannya.
Memulai
Anda dapat membuat alur dengan aktivitas menyalin yang memindahkan data dari sumber SFTP dengan menggunakan alat/API yang berbeda.
Cara termudah untuk membuat alur adalah dengan menggunakan Wizard Salin. Lihat Tutorial: Membuat alur menggunakan Wizard Salin untuk panduan singkat tentang membuat alur menggunakan Wizard Salin data.
Anda juga dapat menggunakan alat berikut untuk membuat pipeline: Visual Studio, Azure PowerShell, template Azure Resource Manager, .NET API, dan REST API. Lihat Tutorial aktivitas salin untuk instruksi langkah demi langkah guna membuat alur dengan aktivitas salin. Untuk sampel JSON untuk menyalin data dari server SFTP ke Azure Blob Storage, lihat Contoh JSON: Menyalin data dari server SFTP ke bagian blob Azure di artikel ini.
Properti layanan tertaut
Tabel berikut memberikan deskripsi untuk elemen JSON khusus untuk layanan yang ditautkan dengan FTP.
| Properti | Deskripsi | Diperlukan |
|---|---|---|
| jenis | Properti tipe harus diatur ke Sftp. |
Ya |
| host | Nama atau alamat IP server SFTP. | Ya |
| port | Port di mana server SFTP mendengarkan. Nilai defaultnya adalah: 21 | Tidak |
| authenticationType | Tentukan jenis autentikasi. Nilai yang diizinkan: Dasar, SshPublicKey. Lihat Menggunakan autentikasi dasar dan Menggunakan bagian autentikasi kunci publik SSH pada lebih banyak properti dan sampel JSON masing-masing. |
Ya |
| skipHostKeyValidation | Tentukan apakah akan melewatkan validasi kunci host. | Nomor. Nilai default: false |
| hostKeyFingerprint | Tentukan sidik jari tombol host. | Ya jika skipHostKeyValidation diatur ke false. |
| gatewayName | Nama Data Management Gateway untuk menyambungkan ke server SFTP lokal. | Ya jika menyalin data dari server SFTP lokal. |
| encryptedCredential | Mandat terenkripsi untuk mengakses server SFTP. Dibuat secara otomatis saat Anda menentukan autentikasi dasar (nama pengguna + kata sandi) atau autentikasi SshPublicKey (nama pengguna + alur kunci pribadi atau konten) dalam Wizard Salin atau dialog popup ClickOnce. | Nomor. Terapkan hanya saat menyalin data dari server SFTP lokal. |
Menggunakan autentikasi dasar
Untuk menggunakan autentikasi dasar, tetapkan authenticationType sebagai Basic, dan tentukan properti berikut selain konektor SFTP generik yang diperkenalkan di bagian terakhir:
| Properti | Deskripsi | Diperlukan |
|---|---|---|
| username | Pengguna yang memiliki akses ke server SFTP. | Ya |
| kata sandi | Kata sandi untuk pengguna (nama pengguna). | Ya |
Contoh: autentikasi dasar
{
"name": "SftpLinkedService",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "mysftpserver",
"port": 22,
"authenticationType": "Basic",
"username": "xxx",
"password": "xxx",
"skipHostKeyValidation": false,
"hostKeyFingerPrint": "ssh-rsa 2048 xx:00:00:00:xx:00:x0:0x:0x:0x:0x:00:00:x0:x0:00",
"gatewayName": "mygateway"
}
}
}
Contoh: Autentikasi dasar dengan kredensial terenkripsi
{
"name": "SftpLinkedService",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "mysftpserver",
"port": 22,
"authenticationType": "Basic",
"username": "xxx",
"encryptedCredential": "xxxxxxxxxxxxxxxxx",
"skipHostKeyValidation": false,
"hostKeyFingerPrint": "ssh-rsa 2048 xx:00:00:00:xx:00:x0:0x:0x:0x:0x:00:00:x0:x0:00",
"gatewayName": "mygateway"
}
}
}
Menggunakan autentikasi kunci publik SSH
Untuk menggunakan autentikasi dasar SSH, tetapkan authenticationType sebagai SshPublicKey, dan tentukan properti berikut selain konektor SFTP generik yang diperkenalkan di bagian terakhir:
| Properti | Deskripsi | Diperlukan |
|---|---|---|
| username | Pengguna yang memiliki akses ke server SFTP | Ya |
| privateKeyPath | Tentukan alur absolut ke file kunci privat yang bisa diakses gateway. | Tentukan privateKeyPath atau privateKeyContent. Terapkan hanya saat menyalin data dari server SFTP lokal. |
| privateKeyContent | String konten kunci privat yang diserialisasikan. Wizard Salin bisa membaca berkas kunci privat dan mengekstrak isi kunci privat secara otomatis. Jika Anda menggunakan alat/SDK lain, gunakan properti privateKeyPath sebagai gantinya. | Tentukan privateKeyPath atau privateKeyContent. |
| passPhrase | Tentukan frasa/kata sandi untuk mendekripsi kunci pribadi jika file kunci dilindungi oleh frasa sandi. | Ya jika file kunci pribadi dilindungi oleh frasa sandi. |
Catatan
Konektor SFTP mendukung kunci RSA/DSA OpenSSH. Pastikan konten file kunci Anda dimulai dengan "-----BEGIN [RSA/DSA] PRIVATE KEY-----". Jika file kunci privat adalah file berformat .ppk, gunakan alat Putty untuk mengonversi dari format .ppk ke OpenSSH.
Contoh: Autentikasi SshPublicKey menggunakan kunci pribadi filePath
{
"name": "SftpLinkedServiceWithPrivateKeyPath",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "mysftpserver",
"port": 22,
"authenticationType": "SshPublicKey",
"username": "xxx",
"privateKeyPath": "D:\\privatekey_openssh",
"passPhrase": "xxx",
"skipHostKeyValidation": true,
"gatewayName": "mygateway"
}
}
}
Contoh: Autentikasi SshPublicKey menggunakan konten kunci pribadi
{
"name": "SftpLinkedServiceWithPrivateKeyContent",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "mysftpserver.westus.cloudapp.azure.com",
"port": 22,
"authenticationType": "SshPublicKey",
"username": "xxx",
"privateKeyContent": "<base64 string of the private key content>",
"passPhrase": "xxx",
"skipHostKeyValidation": true
}
}
}
Properti himpunan data
Untuk daftar lengkap bagian & properti yang tersedia untuk menentukan himpunan data, lihat artikel Membuat himpunan 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 himpunan data. Bagian typeProperties untuk himpunan data jenis FileShare memiliki properti berikut:
| Properti | Deskripsi | Diperlukan |
|---|---|---|
| folderPath | Sub alur ke folder. Gunakan karakter escape ' \ ' untuk karakter khusus dalam string. Lihat sampel layanan tertaut dan definisi himpunan data untuk contoh. 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 himpunan data output, nama file yang dihasilkan dalam format berikut: Data.<Guid>.txt (Contoh: Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt |
Tidak |
| fileFilter | Tentukan filter yang akan digunakan untuk memilih subhimpunan file di folderPath dan bukan semua file. Nilai yang diperbolehkan adalah: * (beberapa karakter) dan ? (karakter tunggal).Contoh 1: "fileFilter": "*.log"Contoh 2: "fileFilter": 2014-1-?.txt"fileFilter berlaku untuk himpunan data FileShare input. Properti ini tidak didukung dengan HDFS. |
Tidak |
| partitionedBy | partitionedBy dapat digunakan untuk menentukan folderPath dinamis, nama file untuk data deret waktu. Contohnya adalah folderPath yang di 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 Format Teks, Format Json, Format Avro, Format Orc, dan Format Parket. Jika Anda ingin menyalin file apa adanya antara penyimpanan berbasis file (salinan biner), lewati bagian format dalam definisi himpunan data input dan output. |
Tidak |
| compression | Menentukan jenis dan tingkat kompresi untuk data. Jenis yang didukung adalah: GZip, Deflate, BZip2, dan ZipDeflate. Level yang didukung adalah: Optimal dan Tercepat. Untuk informasi selengkapnya, lihat Format file dan kompresi di Azure Data Factory. | Tidak |
| useBinaryTransfer | Tentukan apakah menggunakan mode transfer Biner. Berlaku untuk mode biner dan ASCII palsu. Nilai default: True. Properti ini hanya dapat digunakan ketika jenis layanan tertaut terkait berdasarkan jenisnya: FtpServer. | Tidak |
Catatan
filename dan fileFilter tak bisa digunakan secara bersamaan.
Menggunakan properti partitionedBy
Seperti disebutkan di bagian sebelumnya, Anda dapat menentukan folderPath dinamis, nama file untuk data seri waktu dengan partitionedBy. Anda dapat melakukannya dengan makro Azure Data Factory dan variabel sistem SliceStart, SliceEnd yang menunjukkan periode waktu logis untuk irisan data tertentu.
Untuk mempelajari tentang himpunan data deret waktu, penjadwalan, dan irisan, Lihat artikel Membuat Himpunan Data, Penjadwalan& 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. folderPath berbeda untuk setiap irisan. Contoh: 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 diekstraksi ke dalam variabel terpisah yang digunakan oleh folderPath dan properti fileName.
Properti aktivitas salin
Untuk daftar lengkap bagian & properti yang tersedia untuk menentukan aktivitas, lihat artikel Membuat Alur. Properti seperti nama, deskripsi, tabel input dan output, serta kebijakan tersedia untuk semua jenis aktivitas.
Padahal, properti yang tersedia di bagian typeProperties aktivitas berbeda-beda untuk setiap jenis aktivitas. Untuk aktivitas salin, properti jenis bervariasi bergantung pada jenis sumber dan sink.
Dalam Copy Activity, ketika sumber berjenis FileSystemSource, properti berikut tersedia di bagian typeProperties:
| Properti | Deskripsi | Nilai yang diizinkan | Diperlukan |
|---|---|---|---|
| rekursif | Menunjukkan apakah data dibaca secara rekursif dari sub folder atau hanya dari folder yang ditentukan. | True, False (default) | Tidak |
File yang didukung dan format kompresi
Lihat artikelFormat file dan kompresi di artikel Azure Data Factoryuntuk detailnya.
Contoh JSON: Salin data dari server SFTP ke blob Azure
Contoh berikut ini menyediakan contoh definisi JSON yang bisa Anda gunakan untuk membuat alur dengan menggunakan Visual Studio atau Azure PowerShell. Mereka menunjukkan cara menyalin data dari sumber SFTP ke Azure Blob Storage. Namun, data dapat disalin langsung dari salah satu sumber ke salah satu sink yang dinyatakan di sini menggunakan Aktivitas Salin di Azure Data Factory.
Penting
Sampel ini menyediakan cuplikan JSON. Hal ini tidak termasuk instruksi langkah demi langkah untuk membuat pabrik data. Lihat artikelmemindahkan data antara lokasi lokal dan artikel cloud untuk instruksi langkah demi langkah.
Sampel memiliki entitas Data Factory berikut:
- Layanan tertaut jenis sftp .
- Layanan tertaut jenis AzureStorage.
- Sebuah input himpunan data jenis FileShare.
- Sebuah output himpunan data jenis AzureBlob.
- Sebuah alur dengan Aktivitas Salin yang menggunakan FileSystemSource dan BlobSink.
Sampel menyalin data dari server SFTP ke blob Azure setiap jam. Properti JSON yang digunakan dalam sampel ini dijelaskan dalam beberapa bagian setelah sampel.
Layanan tertaut SFTP
Contoh ini menggunakan autentikasi dasar dengan nama pengguna dan kata sandi dalam teks biasa. Anda dapat menggunakan salah satu cara berikut ini:
- Autentikasi dasar dengan kredensial terenkripsi
- Gunakan autentikasi kunci umum SSH
Lihat bagianlayanan tertaut FTP web untuk berbagai jenis autentikasi yang bisa Anda gunakan.
{
"name": "SftpLinkedService",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "mysftpserver",
"port": 22,
"authenticationType": "Basic",
"username": "myuser",
"password": "mypassword",
"skipHostKeyValidation": false,
"hostKeyFingerPrint": "ssh-rsa 2048 xx:00:00:00:xx:00:x0:0x:0x:0x:0x:00:00:x0:x0:00",
"gatewayName": "mygateway"
}
}
}
Layanan tertaut Microsoft Azure Storage
{
"name": "AzureStorageLinkedService",
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
}
}
}
himpunan data input SFTP
Himpunan data ini mengacu pada folder SFTP mysharedfolder dan file test.csv. Alur menyalin file ke tujuan.
Pengaturan "eksternal": "true" menginformasikan layanan Data Factory bahwa himpunan data berada di luar data factory dan tidak diproduksi oleh aktivitas di data factory.
{
"name": "SFTPFileInput",
"properties": {
"type": "FileShare",
"linkedServiceName": "SftpLinkedService",
"typeProperties": {
"folderPath": "mysharedfolder",
"fileName": "test.csv"
},
"external": true,
"availability": {
"frequency": "Hour",
"interval": 1
}
}
}
himpunan 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/sftp/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
}
}
}
Alur dengan aktivitas Salin
Alur berisi Aktivitas Salin yang dikonfigurasi untuk menggunakan himpunan 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": "SFTPToBlobCopy",
"inputs": [{
"name": "SFTPFileInput"
}],
"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": "2017-02-20T18:00:00Z",
"end": "2017-02-20T19:00:00Z"
}
}
Kinerja dan Penyetelan
Lihat Performa Aktivitas Penyalinan & Panduan Pengaturan untuk mempelajari tentang faktor utama yang memengaruhi performa perpindahan data (Aktivitas Penyalinan) di Azure Data Factory dan berbagai cara untuk mengoptimalkannya.
Langkah berikutnya
Lihat artikel berikut ini:
- Tutorial Aktivitas Salin untuk instruksi langkah demi langkah untuk membuat alur dengan Aktivitas Salin.