Copier et transformer des données dans le serveur SFTP en utilisant Azure Data Factory ou Azure Synapse Analytics
S’APPLIQUE À : Azure Data Factory Azure Synapse Analytics
Conseil
Essayez Data Factory dans Microsoft Fabric, une solution d’analyse tout-en-un pour les entreprises. Microsoft Fabric couvre tous les aspects, du déplacement des données à la science des données, en passant par l’analyse en temps réel, l’aide à la décision et la création de rapports. Découvrez comment démarrer un nouvel essai gratuitement !
Cet article explique comment utiliser l’activité de copie pour copier des données depuis et vers le serveur FTP sécurisé (SFTP) et utiliser Data Flow pour transformer des données dans le serveur SFTP. Pour en savoir plus lisez l’article d’introduction pour Azure Data Factory ou Azure Synapse Analytics.
Fonctionnalités prises en charge
Ce connecteur SFTP est pris en charge pour les capacités suivantes :
Fonctionnalités prises en charge | IR |
---|---|
Activité de copie (source/récepteur) | |
Mappage de flux de données (source/récepteur) | 0 |
Activité de recherche | |
Activité GetMetadata | |
Supprimer l’activité |
① Runtime d’intégration Azure ② Runtime d’intégration auto-hébergé
Plus précisément, le connecteur SFTP prend en charge les opérations suivantes :
- Copie de fichiers depuis et vers le serveur SFTP en utilisant l’authentification De base, Clé publique SSH ou multifacteur.
- Copie de fichiers en l’état, ou en analysant ou en générant les fichiers avec les formats de fichier et codecs de compression pris en charge.
Prérequis
Si votre magasin de données se trouve dans un réseau local, un réseau virtuel Azure ou un cloud privé virtuel Amazon, vous devez configurer un runtime d’intégration auto-hébergé pour vous y connecter.
Si votre magasin de données est un service de données cloud managé, vous pouvez utiliser Azure Integration Runtime. Si l’accès est limité aux adresses IP qui sont approuvées dans les règles de pare-feu, vous pouvez ajouter les adresses IP Azure Integration Runtime dans la liste d’autorisation.
Vous pouvez également utiliser la fonctionnalité de runtime d’intégration de réseau virtuel managé dans Azure Data Factory pour accéder au réseau local sans installer et configurer un runtime d’intégration auto-hébergé.
Pour plus d’informations sur les mécanismes de sécurité réseau et les options pris en charge par Data Factory, consultez Stratégies d’accès aux données.
Bien démarrer
Pour effectuer l’activité Copie avec un pipeline, vous pouvez vous servir de l’un des outils ou kits SDK suivants :
- L’outil Copier des données
- Le portail Azure
- Le kit SDK .NET
- Le kit SDK Python
- Azure PowerShell
- L’API REST
- Le modèle Azure Resource Manager
Créer un service lié SFTP à l’aide de l’interface utilisateur
Utilisez les étapes suivantes pour créer un service lié SFTP dans l’interface utilisateur du portail Azure.
Accédez à l’onglet Gérer dans votre espace de travail Azure Data Factory ou Synapse et sélectionnez Services liés, puis cliquez sur Nouveau :
Recherchez SFTP et sélectionnez le connecteur SFTP.
Configurez les informations du service, testez la connexion et créez le nouveau service lié.
Informations de configuration des connecteurs
Les sections suivantes fournissent des informations détaillées sur les propriétés utilisées pour définir les entités spécifiques de SFTP.
Propriétés du service lié
Les propriétés suivantes sont prises en charge pour le service lié SFTP :
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type doit être définie sur Sftp. | Oui |
host | Nom ou adresse IP du serveur SFTP. | Oui |
port | Port sur lequel le serveur SFTP est à l’écoute. La valeur autorisée est un entier et la valeur par défaut est 22. |
Non |
skipHostKeyValidation | Spécifiez s’il faut ignorer la validation de la clé hôte. Les valeurs autorisées sont True et False (par défaut). |
Non |
hostKeyFingerprint | Spécifiez l’empreinte de la clé hôte. | Oui, si la valeur de « skipHostKeyValidation » est définie sur false. |
authenticationType | Spécifiez le type d’authentification. Les valeurs autorisées sont De base, SshPublicKey et Multifacteur. Pour plus d’informations sur les propriétés, consultez la section Utiliser une authentification de base. Pour obtenir des exemples JSON, consultez la section Utiliser l’authentification par clé publique SSH. |
Oui |
connectVia | Le runtime d’intégration à utiliser pour se connecter à la banque de données. Pour en savoir plus, consultez la section Conditions préalables. Si le runtime d’intégration n’est pas spécifié, le service utilise le runtime d’intégration Azure par défaut. | Non |
Utiliser une authentification de base
Pour utiliser l’authentification de base, définissez la propriété authenticationType sur De base et spécifiez les propriétés suivantes en plus des propriétés génériques du connecteur SFTP présentées dans la section précédente :
Propriété | Description | Obligatoire |
---|---|---|
userName | Utilisateur ayant accès au serveur SFTP. | Oui |
mot de passe | Mot de passe de l’utilisateur (userName). Marquez ce champ en tant que SecureString afin de le stocker en toute sécurité, ou référencez un secret stocké dans Azure Key Vault. | Oui |
Exemple :
{
"name": "SftpLinkedService",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "<sftp server>",
"port": 22,
"skipHostKeyValidation": false,
"hostKeyFingerPrint": "ssh-rsa 2048 xx:00:00:00:xx:00:x0:0x:0x:0x:0x:00:00:x0:x0:00",
"authenticationType": "Basic",
"userName": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
}
},
"connectVia": {
"referenceName": "<name of integration runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Utiliser l’authentification par clé publique SSH
Pour utiliser l’authentification par clé publique SSH, définissez la propriété « authenticationType » sur De base et spécifiez les propriétés suivantes en plus des propriétés génériques du connecteur SFTP présentées dans la dernière section :
Propriété | Description | Obligatoire |
---|---|---|
userName | Utilisateur ayant accès au serveur SFTP. | Oui |
privateKeyPath | Spécifiez le chemin absolu au fichier de clé privée auquel le runtime d’intégration peut accéder. Cela s’applique uniquement quand le type auto-hébergé du runtime d’intégration est spécifié dans « connectVia ». | Spécifiez privateKeyPath ou privateKeyContent . |
privateKeyContent | Contenu de clé privée SSH encodé en Base64. La clé privée SSH doit être au format OpenSSH. Marquez ce champ en tant que SecureString afin de le stocker en toute sécurité, ou référencez un secret stocké dans Azure Key Vault. | Spécifiez privateKeyPath ou privateKeyContent . |
passPhrase | Spécifiez la phrase secrète ou le mot de passe pour déchiffrer la clé privée si le fichier de clé ou le contenu de clé est protégé par une phrase secrète. Marquez ce champ en tant que SecureString afin de le stocker en toute sécurité, ou référencez un secret stocké dans Azure Key Vault. | Oui, si le fichier de clé privée ou le contenu de clé est protégé par une phrase secrète. |
Notes
Le connecteur SFTP prend en charge une clé OpenSSH RSA/DSA. Assurez-vous que le contenu de votre fichier de clé commence par « -----BEGIN [RSA/DSA] PRIVATE KEY----- ». Si le fichier de clé privée est un fichier au format PPK, utilisez l’outil PuTTY pour effectuer la conversion du format PPK au format OpenSSH.
Exemple 1 : Authentification SshPublicKey avec un chemin de fichier de clé privée
{
"name": "SftpLinkedService",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "<sftp server>",
"port": 22,
"skipHostKeyValidation": true,
"authenticationType": "SshPublicKey",
"userName": "xxx",
"privateKeyPath": "D:\\privatekey_openssh",
"passPhrase": {
"type": "SecureString",
"value": "<pass phrase>"
}
},
"connectVia": {
"referenceName": "<name of integration runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Exemple 2 : Authentification SshPublicKey avec un contenu de clé privée
{
"name": "SftpLinkedService",
"type": "Linkedservices",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "<sftp server>",
"port": 22,
"skipHostKeyValidation": true,
"authenticationType": "SshPublicKey",
"userName": "<username>",
"privateKeyContent": {
"type": "SecureString",
"value": "<base64 string of the private key content>"
},
"passPhrase": {
"type": "SecureString",
"value": "<pass phrase>"
}
},
"connectVia": {
"referenceName": "<name of integration runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Utiliser l'authentification multifacteur
Pour utiliser l’authentification multifacteur qui est une combinaison d’authentifications de base et de clé publique SSH, spécifiez le nom d’utilisateur, le mot de passe et les informations de clé privée décrites dans les sections ci-dessus.
Exemple : authentification multifacteur
{
"name": "SftpLinkedService",
"properties": {
"type": "Sftp",
"typeProperties": {
"host": "<host>",
"port": 22,
"authenticationType": "MultiFactor",
"userName": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"privateKeyContent": {
"type": "SecureString",
"value": "<base64 encoded private key content>"
},
"passPhrase": {
"type": "SecureString",
"value": "<passphrase for private key>"
}
},
"connectVia": {
"referenceName": "<name of integration runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Propriétés du jeu de données
Pour obtenir la liste complète des sections et propriétés disponibles pour la définition de jeux de données, consultez l’article Jeux de données.
Azure Data Factory prend en charge les formats de fichier suivants. Reportez-vous à chaque article pour les paramètres basés sur le format.
- Format Avro
- Format binaire
- Format de texte délimité
- Format Excel
- Format JSON
- Format ORC
- Format Parquet
- Format XML
Les propriétés suivantes sont prises en charge pour SFTP sous les paramètres location
dans le jeu de données basé sur le format :
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type sous location dans le jeu de données doit être définie sur SftpLocation. |
Oui |
folderPath | Chemin du dossier. Si vous souhaitez utiliser un caractère générique pour filtrer le dossier, ignorez ce paramètre et spécifiez le chemin dans les paramètres de la source de l’activité. | Non |
fileName | Nom de fichier sous le chemin folderPath spécifié. Si vous souhaitez utiliser un caractère générique pour filtrer les fichiers, ignorez ce paramètre et spécifiez le nom de fichier dans les paramètres de la source de l’activité. | Non |
Exemple :
{
"name": "DelimitedTextDataset",
"properties": {
"type": "DelimitedText",
"linkedServiceName": {
"referenceName": "<SFTP linked service name>",
"type": "LinkedServiceReference"
},
"schema": [ < physical schema, optional, auto retrieved during authoring > ],
"typeProperties": {
"location": {
"type": "SftpLocation",
"folderPath": "root/folder/subfolder"
},
"columnDelimiter": ",",
"quoteChar": "\"",
"firstRowAsHeader": true,
"compressionCodec": "gzip"
}
}
}
Propriétés de l’activité de copie
Pour obtenir la liste complète des sections et des propriétés disponibles pour la définition des activités, consultez l’article Pipelines. Cette section fournit la liste des propriétés prises en charge par la source SFTP.
SFTP en tant que source
Azure Data Factory prend en charge les formats de fichier suivants. Reportez-vous à chaque article pour les paramètres basés sur le format.
- Format Avro
- Format binaire
- Format de texte délimité
- Format Excel
- Format JSON
- Format ORC
- Format Parquet
- Format XML
Les propriétés suivantes sont prises en charge pour SFTP sous les paramètres storeSettings
dans la source de copie basée sur le format :
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type sous storeSettings doit être définie sur SftpReadSettings. |
Oui |
Rechercher les fichiers à copier | ||
OPTION 1 : chemin d’accès statique |
Copiez à partir du chemin de dossier/fichier spécifié dans le jeu de données. Si vous souhaitez copier tous les fichiers d’un dossier, spécifiez en plus wildcardFileName comme * . |
|
OPTION 2 : caractère générique - wildcardFolderPath |
Chemin d’accès du dossier avec des caractères génériques pour filtrer les dossiers sources. Les caractères génériques autorisés sont * (correspond à zéro, un ou plusieurs caractères) et ? (correspond à zéro ou un caractère) ; utilisez ^ en guise d’échappement si votre nom de dossier contient effectivement un caractère générique ou ce caractère d’échappement. Pour d’autres exemples, consultez Exemples de filtres de dossier et de fichier. |
Non |
OPTION 2 : caractère générique - wildcardFileName |
Nom du fichier avec des caractères génériques situé dans le chemin folderPath/wildcardFolderPath spécifié pour filtrer les fichiers sources. Les caractères génériques autorisés sont : * (correspond à zéro ou plusieurs caractères) et ? (correspond à zéro ou à un caractère) ; utilisez ^ en guise d’échappement si votre nom de fichier contient effectivement ce caractère d’échappement ou générique. Pour d’autres exemples, consultez Exemples de filtres de dossier et de fichier. |
Oui |
OPTION 3 : liste de fichiers - fileListPath |
Indique de copier un ensemble de fichiers spécifié. Pointez sur un fichier texte qui contient une liste de fichiers que vous voulez copier (un fichier par ligne, avec le chemin relatif au chemin configuré dans le jeu de données). Lorsque vous utilisez cette option, ne spécifiez pas le nom de fichier dans le jeu de données. Pour plus d’exemples, consultez Exemples de listes de fichiers. |
Non |
Paramètres supplémentaires | ||
recursive | Indique si les données sont lues de manière récursive à partir des sous-dossiers ou uniquement du dossier spécifié. Lorsque l’option « recursive » est définie sur true et que le récepteur est un magasin basé sur un fichier, un dossier vide ou un sous-dossier n’est pas copié ou créé sur le récepteur. Les valeurs autorisées sont true (par défaut) et false. Cette propriété ne s’applique pas lorsque vous configurez fileListPath . |
Non |
deleteFilesAfterCompletion | Indique si les fichiers binaires seront supprimés du magasin source après leur déplacement vers le magasin de destination. La suppression se faisant par fichier, lorsque l’activité de copie échoue, vous pouvez constater que certains fichiers ont déjà été copiés vers la destination et supprimés de la source, tandis que d’autres restent dans le magasin source. Cette propriété est valide uniquement dans un scénario de copie de fichiers binaires. La valeur par défaut est false. |
Non |
modifiedDatetimeStart | Les fichiers sont filtrés en fonction de l’attribut Dernière modification. Les fichiers sont sélectionnés si leur dernière heure de modification est supérieure ou égale à modifiedDatetimeStart et inférieure à modifiedDatetimeEnd . L’heure est appliquée au fuseau horaire UTC au format 2018-12-01T05:00:00Z. Les propriétés peuvent être NULL, ce qui signifie qu’aucun filtre d’attribut de fichier n’est appliqué au jeu de données. Lorsque modifiedDatetimeStart a une valeur DateHeure, mais que modifiedDatetimeEnd est NULL, cela signifie que les fichiers dont l’attribut de dernière modification est supérieur ou égal à la valeur DateHeure sont sélectionnés. Lorsque modifiedDatetimeEnd a une valeur DateHeure, mais que modifiedDatetimeStart est NULL, cela signifie que les fichiers dont l’attribut de dernière modification est inférieur à la valeur DateHeure sont sélectionnés.Cette propriété ne s’applique pas lorsque vous configurez fileListPath . |
Non |
modifiedDatetimeEnd | Identique à ce qui précède. | Non |
enablePartitionDiscovery | Pour les fichiers partitionnés, spécifiez s’il faut analyser les partitions à partir du chemin d’accès au fichier et les ajouter en tant que colonnes sources supplémentaires. Les valeurs autorisées sont false (par défaut) et true. |
Non |
partitionRootPath | Lorsque la découverte de partition est activée, spécifiez le chemin d’accès racine absolu pour pouvoir lire les dossiers partitionnés en tant que colonnes de données. S’il n’est pas spécifié, par défaut : – Quand vous utilisez le chemin d’accès du fichier dans le jeu de données ou la liste des fichiers sur la source, le chemin racine de la partition est le chemin d’accès configuré dans le jeu de données. – Quand vous utilisez le filtre de dossiers de caractères génériques, le chemin d’accès racine de la partition est le sous-chemin d’accès avant le premier caractère générique. Par exemple, en supposant que vous configurez le chemin d’accès dans le jeu de données en tant que « root/folder/year=2020/month=08/day=27 » : – Si vous spécifiez le chemin d’accès racine de la partition en tant que « root/folder/year=2020 », l’activité de copie génère deux colonnes supplémentaires, month et day , ayant respectivement la valeur « 08 » et « 27 », en plus des colonnes contenues dans les fichiers.– Si le chemin d’accès racine de la partition n’est pas spécifié, aucune colonne supplémentaire n’est générée. |
Non |
maxConcurrentConnections | La limite supérieure de connexions simultanées établies au magasin de données pendant l’exécution de l’activité. Spécifiez une valeur uniquement lorsque vous souhaitez limiter les connexions simultanées. | Non |
disableChunking | Lors de la copie des données à partir de SFTP, le service tente d’abord d’obtenir la longueur du fichier, puis de le diviser en plusieurs parties et de les lire en parallèle. Spécifiez si votre serveur SFTP prend en charge l’obtention de la longueur du fichier ou la lecture à partir d’un décalage donné. Les valeurs autorisées sont false (par défaut), true. |
Non |
Exemple :
"activities":[
{
"name": "CopyFromSFTP",
"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": "SftpReadSettings",
"recursive": true,
"wildcardFolderPath": "myfolder*A",
"wildcardFileName": "*.csv",
"disableChunking": false
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
SFTP en tant que récepteur
Azure Data Factory prend en charge les formats de fichier suivants. Reportez-vous à chaque article pour les paramètres basés sur le format.
Les propriétés suivantes sont prises en charge pour SFTP sous les paramètres storeSettings
dans un récepteur de copie basée sur le format :
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type sous storeSettings doit être définie sur SftpWriteSettings. |
Oui |
copyBehavior | Définit le comportement de copie lorsque la source est constituée de fichiers d’une banque de données basée sur un fichier. Les valeurs autorisées sont les suivantes : - PreserveHierarchy (par défaut) : conserve la hiérarchie des fichiers dans le dossier cible. Le chemin relatif du fichier source vers le dossier source est identique au chemin relatif du fichier cible vers le dossier cible. - FlattenHierarchy : tous les fichiers du dossier source figurent dans le premier niveau du dossier cible. Les noms des fichiers cibles sont générés automatiquement. - MergeFiles : fusionne tous les fichiers du dossier source dans un seul fichier. Si le nom de fichier est spécifié, le nom de fichier fusionné est le nom spécifié. Dans le cas contraire, il s’agit d’un nom de fichier généré automatiquement. |
Non |
maxConcurrentConnections | La limite supérieure de connexions simultanées établies au magasin de données pendant l’exécution de l’activité. Spécifiez une valeur uniquement lorsque vous souhaitez limiter les connexions simultanées. | Non |
useTempFileRename | Indiquez si vous souhaitez effectuer un chargement dans des fichiers temporaires puis les renommer, ou si vous souhaitez écrire directement dans l’emplacement de dossier ou de fichier cible. Par défaut, le service écrit d’abord dans des fichiers temporaires, puis les renomme une fois le chargement terminé. Cette séquence permet (1) d’éviter les conflits susceptibles d’entraîner l’altération d’un fichier si d’autres processus écrivent dans le même fichier, et (2) de garantir l’existence de la version d’origine du fichier pendant le transfert. Si votre serveur SFTP ne prend pas en charge l’opération de renommage, désactivez cette option et vérifiez qu’aucun autre processus d’écriture n’est en cours sur le fichier cible. Pour plus d’informations, consultez le conseil de dépannage fourni après ce tableau. | Non. La valeur par défaut est true. |
operationTimeout | Délai d’attente avant l’expiration de chaque demande d’écriture au serveur SFTP. La valeur par défaut est 60 minutes (01:00:00). | Non |
Conseil
Si vous recevez l’erreur « UserErrorSftpPathNotFound », « UserErrorSftpPermissionDenied » ou « SftpOperationFail » lorsque vous écrivez des données dans SFTP et que l’utilisateur SFTP que vous utilisez dispose des autorisations appropriées, vérifiez que l’opération de renommage du fichier de prise en charge de votre serveur SFTP fonctionne. Si ce n’est pas le cas, désactivez l’option Charger avec le fichier temporaire (useTempFileRename
) et réessayez. Pour en savoir plus sur cette propriété, consultez le tableau précédent. Si vous utilisez un runtime d’intégration auto-hébergé pour l’activité de copie, veillez à utiliser la version 4.6 ou une version ultérieure.
Exemple :
"activities":[
{
"name": "CopyToSFTP",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "BinarySink",
"storeSettings":{
"type": "SftpWriteSettings",
"copyBehavior": "PreserveHierarchy"
}
}
}
}
]
Exemples de filtres de dossier et de fichier
Cette section décrit le comportement résultant de l’utilisation de filtres de caractères génériques avec des chemins de dossiers et des noms de fichiers.
folderPath | fileName | recursive | Structure du dossier source et résultat du filtrage (les fichiers en gras sont récupérés) |
---|---|---|---|
Folder* |
(vide, utiliser la valeur par défaut) | false | DossierA Fichier1.csv File2.json Sousdossier1 File3.csv File4.json File5.csv AutreDossierB Fichier6.csv |
Folder* |
(vide, utiliser la valeur par défaut) | true | DossierA Fichier1.csv File2.json Sousdossier1 File3.csv File4.json File5.csv AutreDossierB Fichier6.csv |
Folder* |
*.csv |
false | DossierA Fichier1.csv Fichier2.json Sousdossier1 File3.csv File4.json File5.csv AutreDossierB Fichier6.csv |
Folder* |
*.csv |
true | DossierA Fichier1.csv Fichier2.json Sousdossier1 File3.csv File4.json File5.csv AutreDossierB Fichier6.csv |
Exemples de liste de fichiers
Ce tableau décrit le comportement résultant de l’utilisation d’un chemin de liste de fichiers dans la source de l’activité de copie. Il suppose que vous disposez de la structure de dossiers sources suivante et que vous souhaitez copier les fichiers en gras :
Exemple de structure source | Contenu de FileListToCopy.txt | Configuration d’Azure Data Factory |
---|---|---|
root DossierA Fichier1.csv Fichier2.json Sousdossier1 File3.csv File4.json File5.csv Métadonnées FileListToCopy.txt |
File1.csv Subfolder1/File3.csv Subfolder1/File5.csv |
Dans le jeu de données : - chemin d’accès du dossier : root/FolderA Dans la source de l’activité de copie : - chemin d’accès à la liste de fichiers : root/Metadata/FileListToCopy.txt Le chemin d’accès à la liste de fichiers pointe vers un fichier texte dans le même magasin de données qui contient la liste de fichiers que vous voulez copier (un fichier par ligne étant le chemin d’accès relatif au chemin d’accès configuré dans le jeu de données). |
Propriétés du mappage de flux de données
Lorsque vous transformez des données en flux de données de mappage, vous pouvez lire et écrire des fichiers à partir de SFTP aux formats suivants :
Les paramètres spécifiques du format se trouvent dans la documentation de ce format. Pour plus d’informations, consultez Transformation de source en flux de données de mappage et Transformation de récepteur en flux de données de mappage.
Notes
La validation de la clé hôte SSH n’est pas prise en charge dans le flux de données de mappage actuellement.
Notes
Pour accéder à un serveur SFTP local, vous devez utiliser le réseau virtuel managé de l’espace de travail Azure Data Factory ou Synapse via un point de terminaison privé. Pour connaître les étapes détaillées, reportez-vous à ce tutoriel.
Transformation de la source
Le tableau ci-dessous répertorie les propriétés prises en charge par une source SFTP. Vous pouvez modifier ces propriétés sous l’onglet Options de la source. Lorsque vous utilisez un jeu de données inlined, vous verrez des paramètres supplémentaires qui sont les mêmes que les propriétés décrites dans la section des propriétés du jeu de données.
Nom | Description | Obligatoire | Valeurs autorisées | Propriété du script de flux de données |
---|---|---|---|---|
Chemin contenant des caractères génériques | Si vous utilisez un modèle à caractères génériques, le système demande à ADF de lire chaque dossier et fichier correspondant en boucle dans une même transformation de source. Il s’agit d’un moyen efficace de traiter plusieurs fichiers dans un seul et même flux. | Non | String[] | wildcardPaths |
Chemin racine de la partition | Si vous avez partitionné des dossiers dans votre source de fichier avec un format key=value (par exemple, year=2019 ), vous pouvez attribuer le niveau supérieur de cette arborescence de dossiers de partitions à un nom de colonne dans votre flux de données. |
Non | String | partitionRootPath |
N’autoriser aucun fichier trouvé | Si la valeur est true, aucune erreur n’est levée si aucun fichier n’est trouvé. | Non | true ou false |
ignoreNoFilesFound |
Liste de fichiers | Il s’agit d’un ensemble de fichiers. Créez un fichier texte qui inclut une liste de fichiers avec chemin relatif à traiter. Pointez sur ce fichier texte. | Non | true ou false |
fileList |
Colonne où stocker le nom du fichier | Stockez le nom du fichier source dans une colonne de vos données. Entrez un nouveau nom de colonne pour stocker la chaîne de nom de fichier. | Non | String | rowUrlColumn |
Après l’exécution | après l’exécution du flux de données, choisissez de ne rien faire avec le fichier source, de le supprimer ou de le déplacer. Pour le déplacement, les chemins sont des chemins relatifs. | Non | Supprimer : true ou false Déplacer : ['<from>', '<to>'] |
purgeFiles moveFiles |
Filtrer par date de dernière modification | Vous pouvez filtrer les fichiers traités en spécifiant une plage de dates sur laquelle les fichiers ont été modifiés pour la dernière fois. Toutes les dates et heures sont exprimées en UTC. | Non | Timestamp | modifiedAfter modifiedBefore |
Exemple de script source SFTP
Quand vous utilisez un jeu de données SFTP comme type de source, le script de flux de données associé est le suivant :
source(allowSchemaDrift: true,
validateSchema: false,
ignoreNoFilesFound: true,
purgeFiles: true,
fileList: true,
modifiedAfter: (toTimestamp(1647388800000L)),
modifiedBefore: (toTimestamp(1647561600000L)),
partitionRootPath: 'partdata',
wildcardPaths:['partdata/**/*.csv']) ~> SFTPSource
Transformation du récepteur
Le tableau ci-dessous répertorie les propriétés prises en charge par un récepteur SFTP. Vous pouvez modifier ces propriétés sous l’onglet Paramètres. Lorsque vous utilisez un jeu de données inlined, vous verrez des paramètres supplémentaires qui sont les mêmes que les propriétés décrites dans la section Propriétés du jeu de données.
Nom | Description | Obligatoire | Valeurs autorisées | Propriété du script de flux de données |
---|---|---|---|---|
Effacer le contenu du dossier | Détermine si le contenu du dossier de destination doit être effacé avant l’écriture des données. | Non | true ou false |
truncate |
Option de nom de fichier | Format de nommage des données écrites. Par défaut, un fichier par partition au format part-#####-tid-<guid> . |
Non | Modèle : Chaîne Par partition : Chaîne[] Fichier de nom en tant que données de colonne : String Dossier de nom en tant que données de colonne : String Sortie dans un fichier unique : ['<fileName>'] |
filePattern partitionFileNames rowUrlColumn rowFolderUrlColumn partitionFileNames |
Tout mettre entre guillemets | Détermine si toutes les valeurs doivent être placées entre guillemets. | Non | true ou false |
quoteAll |
Exemple de script de récepteur SFTP
Quand vous utilisez un jeu de données SFTP comme type de récepteur, le script de flux de données associé est le suivant :
IncomingStream sink(allowSchemaDrift: true,
validateSchema: false,
filePattern:'loans[n].csv',
truncate: true,
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> SFTPSink
Propriétés de l’activité Lookup
Pour obtenir des informations sur les propriétés de l’activité de recherche, consultez Activité de recherche.
Propriétés de l’activité GetMetadata
Pour obtenir des informations sur les propriétés de l’activité GetMetadata, consultez Activité GetMetadata.
Propriétés de l’activité Delete
Pour obtenir des informations sur les propriétés de l’activité Delete, consultez Activité Delete.
Modèles hérités
Notes
Les modèles suivants sont toujours pris en charge tels quels à des fins de compatibilité descendante. Nous vous recommandons d’utiliser le nouveau modèle abordé précédemment, car l’interface utilisateur de création a basculé vers la génération du nouveau modèle.
Modèle de jeu de données hérité
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type du jeu de données doit être définie sur FileShare. | Oui |
folderPath | Chemin du dossier. Un filtre de caractères génériques est pris en charge. Les caractères génériques autorisés sont * (correspond à zéro, un ou plusieurs caractères) et ? (correspond à zéro ou un caractère) ; utilisez ^ en guise d’échappement si votre nom de fichier contient effectivement un caractère générique ou ce caractère d’échappement. Exemples : dossier_racine/sous-dossier/ ; consultez d’autres exemples dans Exemples de filtres de dossier et de fichier. |
Oui |
fileName | Filtre de noms ou de caractères génériques pour les fichiers sous le chemin « folderPath » spécifié. Si vous ne spécifiez pas de valeur pour cette propriété, le jeu de données pointe vers tous les fichiers du dossier. Pour le filtre, les caractères génériques autorisés sont * (correspond à zéro, un ou plusieurs caractères) et ? (correspond à zéro ou un caractère).- Exemple 1 : "fileName": "*.csv" - Exemple 2 : "fileName": "???20180427.txt" Utilisez ^ comme caractère d'échappement si le nom réel de votre dossier contient des caractères génériques ou ce caractère d'échappement. |
Non |
modifiedDatetimeStart | Les fichiers sont filtrés en fonction de l’attribut Dernière modification. Les fichiers sont sélectionnés si leur dernière heure de modification est supérieure ou égale à modifiedDatetimeStart et inférieure à modifiedDatetimeEnd . L’heure est appliquée au fuseau horaire UTC au format 2018-12-01T05:00:00Z. Les performances globales du déplacement des données sont affectées par l’activation de ce paramètre lorsque vous souhaitez filtrer des fichiers parmi un grand nombre de fichiers. Les propriétés peuvent être NULL, ce qui signifie qu’aucun filtre d’attribut de fichier n’est appliqué au jeu de données. Lorsque modifiedDatetimeStart a une valeur DateHeure, mais que modifiedDatetimeEnd est NULL, cela signifie que les fichiers dont l’attribut de dernière modification est supérieur ou égal à la valeur DateHeure sont sélectionnés. Lorsque modifiedDatetimeEnd a une valeur DateHeure, mais que modifiedDatetimeStart est NULL, cela signifie que les fichiers dont l’attribut de dernière modification est inférieur à la valeur DateHeure sont sélectionnés. |
Non |
modifiedDatetimeEnd | Les fichiers sont filtrés en fonction de l’attribut Dernière modification. Les fichiers sont sélectionnés si leur dernière heure de modification est supérieure ou égale à modifiedDatetimeStart et inférieure à modifiedDatetimeEnd . L’heure est appliquée au fuseau horaire UTC au format 2018-12-01T05:00:00Z. Les performances globales du déplacement des données sont affectées par l’activation de ce paramètre lorsque vous souhaitez filtrer des fichiers parmi un grand nombre de fichiers. Les propriétés peuvent être NULL, ce qui signifie qu’aucun filtre d’attribut de fichier n’est appliqué au jeu de données. Lorsque modifiedDatetimeStart a une valeur DateHeure, mais que modifiedDatetimeEnd est NULL, cela signifie que les fichiers dont l’attribut de dernière modification est supérieur ou égal à la valeur DateHeure sont sélectionnés. Lorsque modifiedDatetimeEnd a une valeur DateHeure, mais que modifiedDatetimeStart est NULL, cela signifie que les fichiers dont l’attribut de dernière modification est inférieur à la valeur DateHeure sont sélectionnés. |
Non |
format | Si vous souhaitez copier des fichiers en l’état entre des magasins de fichiers (copie binaire), ignorez la section Format dans les deux définitions de jeu de données d’entrée et de sortie. Si vous voulez analyser des fichiers dans un format spécifique, les types de format de fichier suivants sont pris en charge : TextFormat, JsonFormat, AvroFormat, OrcFormat et ParquetFormat. Définissez la propriété type située sous Format sur l’une de ces valeurs. Pour plus d’informations, consultez les sections relatives à format Text, format Json, format Avro, format Orc et format Parquet. |
Non (uniquement pour un scénario de copie binaire) |
compression | Spécifiez le type et le niveau de compression pour les données. Pour plus d’informations, voir Formats de fichier et de codecs de compression pris en charge. Les types pris en charge sont : GZip, Deflate, BZip2 et ZipDeflate. Les niveaux pris en charge sont Optimal et Fastest. |
Non |
Conseil
Pour copier tous les fichiers d’un dossier, spécifiez folderPath uniquement.
Pour copier un seul fichier avec un nom donné, spécifiez folderPath avec la partie dossier et fileName avec le nom du fichier.
Pour copier un sous-ensemble de fichiers d’un dossier, spécifiez folderPath avec la partie dossier et fileName avec le filtre de caractères génériques.
Notes
Si vous avez utilisé la propriété fileFilter pour le filtre de fichiers, il est encore pris en charge tel quel, mais nous vous recommandons d’utiliser à l’avenir la nouvelle fonctionnalité de filtre ajoutée à fileName.
Exemple :
{
"name": "SFTPDataset",
"type": "Datasets",
"properties": {
"type": "FileShare",
"linkedServiceName":{
"referenceName": "<SFTP linked service name>",
"type": "LinkedServiceReference"
},
"typeProperties": {
"folderPath": "folder/subfolder/",
"fileName": "*",
"modifiedDatetimeStart": "2018-12-01T05:00:00Z",
"modifiedDatetimeEnd": "2018-12-01T06:00:00Z",
"format": {
"type": "TextFormat",
"columnDelimiter": ",",
"rowDelimiter": "\n"
},
"compression": {
"type": "GZip",
"level": "Optimal"
}
}
}
}
Modèle hérité de la source d’activité de copie
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type de la source d’activité de copie doit être définie sur FileSystemSource | Oui |
recursive | Indique si les données sont lues de manière récursive à partir des sous-dossiers ou uniquement du dossier spécifié. Lorsque l’option « recursive » est définie sur true et que le récepteur est un magasin basé sur un fichier, les dossiers et sous-dossiers vides ne sont pas copiés ni créés au niveau du récepteur. Les valeurs autorisées sont true (par défaut) et false |
Non |
maxConcurrentConnections | La limite supérieure de connexions simultanées établies au magasin de données pendant l’exécution de l’activité. Spécifiez une valeur uniquement lorsque vous souhaitez limiter les connexions simultanées. | Non |
Exemple :
"activities":[
{
"name": "CopyFromSFTP",
"type": "Copy",
"inputs": [
{
"referenceName": "<SFTP input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "FileSystemSource",
"recursive": true
},
"sink": {
"type": "<sink type>"
}
}
}
]
Contenu connexe
Pour obtenir la liste des magasins de données pris en charge en tant que sources ou récepteurs par l'activité de copie, consultez les magasins de données pris en charge.