Copier des données depuis le serveur FTP à l’aide d’Azure Data Factory ou 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 copier des données depuis un serveur FTP. Pour plus d’informations, consultez les articles de présentation pour Azure Data Factory et Synapse Analytics.
Fonctionnalités prises en charge
Ce connecteur FTP est pris en charge pour les fonctionnalités suivantes :
Fonctionnalités prises en charge | IR |
---|---|
Activité de copie (source/-) | ① ② |
Activité de recherche | ① ② |
Activité GetMetadata | ① ② |
Supprimer l’activité | ① ② |
① Runtime d’intégration Azure ② Runtime d’intégration auto-hébergé
Plus précisément, ce connecteur FTP prend en charge ce qui suit :
- Copie de fichiers en utilisant une authentification De base ou Anonyme.
- Copie de fichiers en l'état ou analyse de fichiers avec les formats de fichier et codecs de compression pris en charge.
Le connecteur FTP prend en charge le serveur FTP exécuté en mode passif. Le mode actif n’est pas 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é à un serveur FTP à l’aide de l’interface utilisateur
Utilisez les étapes suivantes pour créer un service lié à un serveur FTP 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 FTP et sélectionnez le connecteur FTP.
Configurez les informations du service, testez la connexion et créez le nouveau service lié.
Informations de configuration du connecteur
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 FTP.
Propriétés du service lié
Les propriétés prises en charge pour le service lié FTP sont les suivantes :
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type doit être définie sur : FtpServer. | Oui |
host | Spécifiez le nom ou l’adresse IP du serveur FTP. | Oui |
port | Spécifiez le port sur lequel le serveur FTP écoute. Valeurs autorisées : integer, la valeur par défaut est 21. |
Non |
enableSsl | Indiquez si vous souhaitez utiliser FTP sur un canal SSL/TLS. Valeurs autorisées : true (par défaut) et false. |
Non |
enableServerCertificateValidation | Indiquez si vous souhaitez activer la validation des certificats TLS/SSL lors de l’utilisation de FTP sur un canal SSL/TLS. Valeurs autorisées : true (par défaut) et false. |
Non |
authenticationType | Spécifiez le type d’authentification. Les valeurs autorisées sont les suivantes : Basic, Anonymous |
Oui |
userName | Spécifiez l’utilisateur ayant accès au serveur FTP. | Non |
mot de passe | Spécifiez le 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. | Non |
connectVia | Runtime d’intégration à utiliser pour la connexion à la banque de données. Pour plus d’informations, consultez la section Conditions préalables. À défaut de spécification, le runtime d’intégration Azure par défaut est utilisé. | Non |
Notes
Le connecteur FTP prend en charge l’accès au serveur FTP avec aucun chiffrement ou le chiffrement SSL/TLS explicite ; Il ne prend pas en charge le chiffrement SSL/TLS implicite.
Exemple 1 : utilisation d’une authentification anonyme
{
"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"
}
}
}
Exemple 2 : utilisation d’une authentification de base
{
"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"
}
}
}
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 FTP sous les paramètres location
dans le jeu de données basé sur le format :
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété de type sous location dans le jeu de données doit être définie sur FtpServerLocation. |
Oui |
folderPath | Chemin d’accès du dossier. Si vous souhaitez utiliser un caractère générique pour filtrer le dossier, ignorez ce paramètre et spécifiez-le dans les paramètres de la source de l’activité. | Non |
fileName | Nom de fichier dans le chemin d’accès folderPath donné. Si vous souhaitez utiliser un caractère générique pour filtrer les fichiers, ignorez ce paramètre et spécifiez-le dans les paramètres de la source de l’activité. | Non |
Exemple :
{
"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"
}
}
}
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 FTP.
FTP 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 FTP sous les paramètres storeSettings
dans la source de la copie basée sur le format :
Propriété | Description | Obligatoire |
---|---|---|
type | La propriété type sous storeSettings doit être définie sur FtpReadSettings. |
Oui |
Recherchez les fichiers à copier : | ||
OPTION 1 : chemin d’accès statique |
Copiez à partir du chemin d’accès au 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 ou plusieurs caractères) et ? (correspond à zéro ou un caractère) ; utilisez ^ en guise d’échappement si votre nom de dossier contient effectivement ce caractère d’échappement ou générique. Consultez d’autres exemples dans les exemples de filtre 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 d’accès folderPath/wildcardFolderPath donné 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. Consultez d’autres exemples dans les exemples de filtre de dossier et de fichier. |
Oui |
OPTION 3 : liste de fichiers - fileListPath |
Indique de copier un ensemble de fichiers donné. Pointez vers un fichier texte contenant la liste des fichiers que vous voulez copier, un fichier par ligne indiquant le chemin d’accès relatif configuré dans le jeu de données. Si vous utilisez cette option, ne spécifiez pas de 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é. Notez que 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 |
useBinaryTransfer | Spécifiez s’il faut utiliser le mode de transfert binaire. Les valeurs sont true pour le mode binaire (par défaut) et false pour ASCII. | 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 FTP, 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 FTP 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": "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>"
}
}
}
]
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 dans les noms de fichier et les chemins de dossier.
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
Cette section décrit le comportement résultant de l’utilisation du chemin d’accès à la liste de fichiers dans la source de l’activité de copie.
En supposant que vous disposez de la structure de dossiers source suivante et que vous souhaitez copier les fichiers en gras :
Exemple de structure source | Contenu de FileListToCopy.txt | Configuration |
---|---|---|
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 de l’activité Lookup
Pour en savoir plus sur les propriétés, consultez Activité Lookup.
Propriétés de l’activité GetMetadata
Pour en savoir plus sur les propriétés, consultez Activité GetMetadata.
Propriétés de l’activité Delete
Pour en savoir plus sur les propriétés, 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. Il est recommandé d’utiliser le nouveau modèle mentionné dans les sections ci-dessus à partir de maintenant. L’interface utilisateur de création peut désormais générer ce 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 d'accès au dossier. Le filtre de caractères génériques est pris en charge, et 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 ^ 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. Exemples : dossier_racine/sous-dossier/ ; consultez d’autres exemples dans Exemples de filtres de dossier et de fichier. |
Oui |
fileName | Filtre de nom ou de caractère générique pour les fichiers sous le « 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. Dans le filtre, les caractères génériques autorisés sont les suivants : * (correspond à zéro caractère ou plus) et ? (correspond à zéro ou un caractère).- Exemple 1 : "fileName": "*.csv" - Exemple 2 : "fileName": "???20180427.txt" Utilisez ^ comme caractère d’échappement si votre nom de fichier réel contient des caractères génériques ou ce caractère d’échappement. |
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 en savoir plus, 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. Types pris en charge : GZip, Deflate, BZip2 et ZipDeflate. Niveaux pris en charge : Optimal et Fastest. |
Non |
useBinaryTransfer | Spécifiez s’il faut utiliser le mode de transfert binaire. Les valeurs sont true pour le mode binaire (par défaut) et false pour ASCII. | 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 utilisez la propriété « fileFilter » pour le filtre de fichiers, il est toujours pris en charge tel quel, mais il est conseillé d’utiliser la nouvelle fonctionnalité de filtre ajoutée à « fileName » à l’avenir.
Exemple :
{
"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"
}
}
}
}
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 dans les sous-dossiers ou uniquement dans le dossier spécifié. Remarque : Quand l’option récursive a la valeur true et que le récepteur est un magasin basé sur des fichiers, le dossier/sous-dossier vide n’est pas copié/créé dans le récepteur. Valeurs autorisées : 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": "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>"
}
}
}
]
Contenu connexe
Pour obtenir une liste des magasins de données pris en charge comme sources et récepteurs par l’activité de copie, consultez la section sur les magasins de données pris en charge.