Gegevens verplaatsen van een SFTP-server met behulp van Azure Data Factory

Notitie

Dit artikel is van toepassing op versie 1 van Data Factory. Als u de huidige versie van de Data Factory-service gebruikt, raadpleegt u SFTPconnector in V2.

In dit artikel wordt beschreven hoe u de kopieeractiviteit in Azure Data Factory kunt gebruiken om gegevens te verplaatsen van een on-premises/cloud SFTP-server naar een ondersteund sinkgegevensarchief. Dit artikel bouwt voort op het artikel over activiteiten voor gegevensverplaatsing met een algemeen overzicht van gegevensverplaatsing met kopieeractiviteit en de lijst met gegevensarchieven die worden ondersteund als bronnen/sinks.

Data factory ondersteunt momenteel alleen het verplaatsen van gegevens van een SFTP-server naar andere gegevensarchieven, maar niet voor het verplaatsen van gegevens van andere gegevensarchieven naar een SFTP-server. Het ondersteunt zowel on-premises als cloud SFTP-servers.

Notitie

Kopieeractiviteit verwijdert het bronbestand niet nadat het is gekopieerd naar het doel. Als u het bronbestand wilt verwijderen na een geslaagde kopie, maakt u een aangepaste activiteit om het bestand te verwijderen en gebruikt u de activiteit in de pijplijn.

Ondersteunde scenario's en verificatietypen

U kunt deze SFTP-connector gebruiken om gegevens te kopiëren van zowel cloud SFTP-servers als on-premises SFTP-servers. Basis - en SshPublicKey-verificatietypen worden ondersteund bij het maken van verbinding met de SFTP-server.

Wanneer u gegevens kopieert van een on-premises SFTP-server, moet u een Gegevensbeheer Gateway installeren in de on-premises omgeving/Azure VM. Zie Gegevensbeheer Gateway voor meer informatie over de gateway. Zie het artikel over het verplaatsen van gegevens tussen on-premises locaties en het cloudartikel voor stapsgewijze instructies over het instellen van de gateway en het gebruik ervan.

Aan de slag

U kunt een pijplijn maken met een kopieeractiviteit waarmee gegevens uit een SFTP-bron worden verplaatst met behulp van verschillende hulpprogramma's/API's.

Gekoppelde service-eigenschappen

De volgende tabel bevat een beschrijving voor JSON-elementen die specifiek zijn voor de gekoppelde FTP-service.

Eigenschap Beschrijving Vereist
type De typeeigenschap moet worden ingesteld op Sftp. Yes
host Naam of IP-adres van de SFTP-server. Yes
poort Poort waarop de SFTP-server luistert. De standaardwaarde is: 21 No
authenticationType Geef het verificatietype op. Toegestane waarden: Basic, SshPublicKey.

Raadpleeg de secties Basisverificatie gebruiken en Verificatiesecties voor openbare SSH-sleutels gebruiken voor respectievelijk meer eigenschappen en JSON-voorbeelden.
Yes
skipHostKeyValidation Geef op of de validatie van hostsleutels moet worden overgeslagen. Nee. De standaardwaarde: false
hostKeyFingerprint Geef de vingerafdruk van de hostsleutel op. Ja als de skipHostKeyValidation optie is ingesteld op false.
gatewayName Naam van de Gegevensbeheer Gateway om verbinding te maken met een on-premises SFTP-server. Ja als u gegevens kopieert van een on-premises SFTP-server.
encryptedCredential Versleutelde referenties voor toegang tot de SFTP-server. Automatisch gegenereerd wanneer u basisverificatie (gebruikersnaam en wachtwoord) of SshPublicKey-verificatie (gebruikersnaam + privésleutelpad of -inhoud) opgeeft in de wizard Kopiëren of het pop-updialoogvenster ClickOnce. Nee. Pas alleen toe bij het kopiëren van gegevens van een on-premises SFTP-server.

Basisverificatie gebruiken

Als u basisverificatie wilt gebruiken, stelt u in authenticationType als Basicen geeft u de volgende eigenschappen op naast de algemene sfTP-connector die in de laatste sectie zijn geïntroduceerd:

Eigenschap Beschrijving Vereist
gebruikersnaam Gebruiker die toegang heeft tot de SFTP-server. Yes
wachtwoord Wachtwoord voor de gebruiker (gebruikersnaam). Yes

Voorbeeld: Basisverificatie

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

Voorbeeld: Basisverificatie met versleutelde referenties

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

Verificatie met openbare SSH-sleutels gebruiken

Als u verificatie met openbare SSH-sleutels wilt gebruiken, stelt u deze in authenticationTypeSshPublicKeyen geeft u de volgende eigenschappen op naast de algemene SSH-connectoren die in de laatste sectie zijn geïntroduceerd:

Eigenschap Beschrijving Vereist
gebruikersnaam Gebruiker die toegang heeft tot de SFTP-server Yes
privateKeyPath Geef het absolute pad op naar het bestand met de persoonlijke sleutel waartoe de gateway toegang heeft. Geef de privateKeyPath of privateKeyContent.

Pas alleen toe bij het kopiëren van gegevens van een on-premises SFTP-server.
privateKeyContent Een geserialiseerde tekenreeks van de inhoud van de persoonlijke sleutel. De wizard Kopiëren kan het bestand met de persoonlijke sleutel lezen en de inhoud van de persoonlijke sleutel automatisch extraheren. Als u een ander hulpprogramma/SDK gebruikt, gebruikt u in plaats daarvan de eigenschap privateKeyPath. Geef de privateKeyPath of privateKeyContent.
Passphrase Geef de wachtwoordzin/het wachtwoord op om de persoonlijke sleutel te ontsleutelen als het sleutelbestand wordt beveiligd met een wachtwoordzin. Ja als het bestand met de persoonlijke sleutel wordt beveiligd met een wachtwoordzin.

Notitie

SFTP-connector ondersteunt RSA/DSA OpenSSH-sleutel. Zorg ervoor dat de inhoud van het sleutelbestand begint met '-----BEGIN [RSA/DSA] PRIVATE KEY-----'. Als het bestand met de persoonlijke sleutel een ppk-indeling is, gebruikt u het hulpprogramma Putty om te converteren van .ppk naar openSSH-indeling.

Voorbeeld: SshPublicKey-verificatie met behulp van filePath met een persoonlijke sleutel

{
    "name": "SftpLinkedServiceWithPrivateKeyPath",
    "properties": {
        "type": "Sftp",
        "typeProperties": {
            "host": "mysftpserver",
            "port": 22,
            "authenticationType": "SshPublicKey",
            "username": "xxx",
            "privateKeyPath": "D:\\privatekey_openssh",
            "passPhrase": "xxx",
            "skipHostKeyValidation": true,
            "gatewayName": "mygateway"
        }
    }
}

Voorbeeld: SshPublicKey-verificatie met persoonlijke-sleutelinhoud

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

Eigenschappen van gegevensset

Zie het artikel Gegevenssets maken voor een volledige lijst met sectie-eigenschappen & die beschikbaar zijn voor het definiëren van gegevenssets. Secties zoals structuur, beschikbaarheid en beleid van een JSON-gegevensset zijn vergelijkbaar voor alle typen gegevenssets.

De sectie typeProperties verschilt voor elk type gegevensset. Het bevat informatie die specifiek is voor het gegevenssettype. De sectie typeProperties voor een gegevensset van het type FileShare-gegevensset heeft de volgende eigenschappen:

Eigenschap Beschrijving Vereist
folderPath Subpad naar de map. Gebruik escape-teken ' \ ' voor speciale tekens in de tekenreeks. Zie Voorbeeld van gekoppelde service- en gegevenssetdefinities voor voorbeelden.

U kunt deze eigenschap combineren met partitionBy om mappaden te hebben op basis van de begin- en einddatum van segmenten.
Yes
fileName Geef de naam op van het bestand in de mapPath als u wilt dat de tabel naar een specifiek bestand in de map verwijst. Als u geen waarde voor deze eigenschap opgeeft, verwijst de tabel naar alle bestanden in de map.

Wanneer fileName niet is opgegeven voor een uitvoergegevensset, heeft de naam van het gegenereerde bestand de volgende indeling:

Data.<Guid>.txt (Voorbeeld: Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt
No
fileFilter Geef een filter op dat moet worden gebruikt om een subset van bestanden te selecteren in de folderPath in plaats van alle bestanden.

Toegestane waarden zijn: * (meerdere tekens) en ? (één teken).

Voorbeelden 1: "fileFilter": "*.log"
Voorbeeld 2: "fileFilter": 2014-1-?.txt"

fileFilter is van toepassing op een gegevensset voor bestandsshareinvoer. Deze eigenschap wordt niet ondersteund met HDFS.
No
partitionedBy partitionedBy kan worden gebruikt om een dynamisch folderPath op te geven, bestandsnaam voor tijdreeksgegevens. MapPath is bijvoorbeeld geparameteriseerd voor elk uur gegevens. No
indeling De volgende indelingstypen worden ondersteund: TextFormat, JsonFormat, AvroFormat, OrcFormat, ParquetFormat. Stel de typeeigenschap onder opmaak in op een van deze waarden. Zie de secties Text Format, Json Format, Avro Format, Orc Format en Parquet Format voor meer informatie.

Als u bestanden als zodanig wilt kopiëren tussen bestandsarchieven (binaire kopie), slaat u de indelingssectie over in definities van invoer- en uitvoergegevenssets.
No
compressie Geef het type en het compressieniveau voor de gegevens op. Ondersteunde typen zijn: GZip, Deflate, BZip2 en ZipDeflate. Ondersteunde niveaus zijn: Optimaal en Snelst. Zie bestands- en compressieindelingen in Azure Data Factory voor meer informatie. No
useBinaryTransfer Geef op of de binaire overdrachtsmodus wordt gebruikt. Waar voor binaire modus en false ASCII. Standaardwaarde: Waar. Deze eigenschap kan alleen worden gebruikt wanneer het gekoppelde servicetype van het type is: FtpServer. No

Notitie

bestandsnaam en fileFilter kunnen niet tegelijkertijd worden gebruikt.

PartionedBy-eigenschap gebruiken

Zoals vermeld in de vorige sectie, kunt u een dynamisch folderPath opgeven, bestandsnaam voor tijdreeksgegevens met partitionedBy. U kunt dit doen met de Data Factory-macro's en de systeemvariabele SliceStart, SliceEnd die de logische tijdsperiode voor een bepaald gegevenssegment aangeven.

Zie artikelen over het maken van gegevenssets, het plannen en segmenten van tijdreeksen voor meer informatie over artikelen over het maken van gegevenssets, planning &en segmenten.

Voorbeeld 1:

"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
    { "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],

In dit voorbeeld wordt {Slice} vervangen door de waarde van data factory-systeemvariabele SliceStart in de indeling (JJJJMMDDHH) die is opgegeven. De SliceStart verwijst naar de begintijd van het segment. De folderPath is verschillend voor elk segment. Voorbeeld: wikidatagateway/wikisampledataout/2014100103 of wikidatagateway/wikisampledataout/2014100104.

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

In dit voorbeeld worden het jaar, de maand, de dag en het tijdstip van SliceStart geëxtraheerd in afzonderlijke variabelen die worden gebruikt door de eigenschappen folderPath en fileName.

Eigenschappen van de kopieeractiviteit

Zie het artikel Pijplijnen maken voor een volledige lijst met sectie-eigenschappen & die beschikbaar zijn voor het definiëren van activiteiten. Eigenschappen zoals naam, beschrijving, invoer- en uitvoertabellen en beleidsregels zijn beschikbaar voor alle typen activiteiten.

Terwijl de eigenschappen die beschikbaar zijn in de sectie typeProperties van de activiteit, variëren met elk activiteitstype. Voor Copy-activiteit variëren de typeeigenschappen, afhankelijk van de typen bronnen en sinks.

Wanneer de bron van het type FileSystemSource is, zijn de volgende eigenschappen beschikbaar in de sectie typeProperties:

Eigenschap Beschrijving Toegestane waarden Vereist
Recursieve Geeft aan of de gegevens recursief worden gelezen uit de submappen of alleen uit de opgegeven map. Waar, Onwaar (standaard) No

Ondersteunde indelingen voor bestanden en compressie

Zie bestands- en compressieindelingen in Azure Data Factory artikel over details.

JSON-voorbeeld: gegevens kopiëren van SFTP-server naar Azure Blob

Het volgende voorbeeld bevat voorbeeld-JSON-definities die u kunt gebruiken om een pijplijn te maken met behulp van Visual Studio of Azure PowerShell. Ze laten zien hoe u gegevens kopieert van de SFTP-bron naar Azure Blob Storage. Gegevens kunnen echter rechtstreeks vanuit een van de bronnen naar een van de sinks worden gekopieerd die hier worden vermeld met behulp van de kopieeractiviteit in Azure Data Factory.

Belangrijk

Dit voorbeeld bevat JSON-fragmenten. Het bevat geen stapsgewijze instructies voor het maken van de data factory. Zie het artikel over het verplaatsen van gegevens tussen on-premises locaties en het cloudartikel voor stapsgewijze instructies.

Het voorbeeld heeft de volgende data factory-entiteiten:

In het voorbeeld worden gegevens van een SFTP-server elk uur gekopieerd naar een Azure-blob. De JSON-eigenschappen die in deze voorbeelden worden gebruikt, worden beschreven in secties na de voorbeelden.

Gekoppelde SFTP-service

In dit voorbeeld wordt de basisverificatie gebruikt met gebruikersnaam en wachtwoord in tekst zonder opmaak. U kunt ook een van de volgende manieren gebruiken:

  • Basisverificatie met versleutelde referenties
  • Verificatie van openbare SSH-sleutels

Zie de sectie gekoppelde FTP-service voor verschillende typen verificatie die u kunt gebruiken.


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

Een gekoppelde Azure Storage-service

{
  "name": "AzureStorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

SFTP-invoergegevensset

Deze gegevensset verwijst naar de SFTP-map mysharedfolder en het bestand test.csv. De pijplijn kopieert het bestand naar het doel.

Het instellen van 'extern': 'true' informeert de Data Factory-service dat de gegevensset extern is voor de data factory en niet wordt geproduceerd door een activiteit in de data factory.

{
  "name": "SFTPFileInput",
  "properties": {
    "type": "FileShare",
    "linkedServiceName": "SftpLinkedService",
    "typeProperties": {
      "folderPath": "mysharedfolder",
      "fileName": "test.csv"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Azure Blob-uitvoergegevensset

Gegevens worden elk uur naar een nieuwe blob geschreven (frequentie: uur, interval: 1). Het mappad voor de blob wordt dynamisch geëvalueerd op basis van de begintijd van het segment dat wordt verwerkt. Het pad naar de map maakt gebruik van delen jaar, maand, dag en uren van de begintijd.

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

Pijplijn met Copy-activiteit

De pijplijn bevat een kopieeractiviteit die is geconfigureerd voor het gebruik van de invoer- en uitvoergegevenssets en die elk uur moet worden uitgevoerd. In de JSON-definitie van de pijplijn wordt het brontype ingesteld op FileSystemSource en het sinktype is ingesteld op 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"
    }
}

Prestaties en afstemming

Zie de handleiding voor het afstemmen van de prestaties & van kopieeractiviteiten voor meer informatie over belangrijke factoren die van invloed zijn op de prestaties van gegevensverplaatsing (kopieeractiviteit) in Azure Data Factory en op verschillende manieren om deze te optimaliseren.

Volgende stappen

Zie de volgende artikelen: