Concepts ADF
Présentation générale
Azure Data Factory est organisé de façon simple, reprenant un vocabulaire connu et une organisation des composants similaire à de nombreux ETL.
Le service est déployé au sein d’Azure, le Cloud de Microsoft, et peut donc être provisionné et géré via plusieurs méthodes qui seront détaillées plus loin dans ce chapitre. Pour l’heure, il n’est pas possible de développer graphiquement un flux de données ADF ailleurs que depuis le portail dédié sur https://adf.azure.com ; les exemples qui suivent sont d’ailleurs réalisés depuis ce portail.
Ce chapitre détaille les différents éléments présents dans Azure Data Factory. L’ordre choisi afin de présenter ces éléments est important, en effet, l’objectif est de respecter l’ordre imposé par l’outil lors de la réalisation d’un flux de données classique. Ainsi, les services liés (Linked Services) sont présentés en premier, car sans eux impossible d’accéder aux ressources externes à Azure Data Factory, suivis des Integration Runtimes, véritables moteurs du service. Puis des jeux de données (Datasets) chargés de référencer et de décrire la donnée et qui pourront...
Correspondance SSIS - ADF
Le vocabulaire d’Azure Data Factory peut être déstabilisant, il existe beaucoup de nouveaux objets à appréhender. Vous trouverez ci-dessous un tableau permettant de faire une équivalence SSIS vers ADF.
Les deux outils sont basés sur des paradigmes différents, cette comparaison ne fait donc pas forcément sens et doit être perçue comme une piste de réflexion plutôt que comme une équivalence stricte.
Concept SSIS |
Concept ADF |
Instance SSIS |
Service Azure Data Factory |
Package |
Pipeline |
Tâche de flux de contrôle |
Activité |
Flux de données |
Datas Flow (Mapping ou Wrangling) |
Gestionnaire de connexion |
Service lié |
- |
Jeu de données |
- |
Déclencheur |
Gestionnaire d’évènement |
- |
Moteur d’exécution SSIS |
Integration Runtimes |
Outils de développement
Le développement de pipelines Azure Data Factory peut être réalisé via plusieurs outils : le portail adf.azure.com, le SDK .NET (C#), Azure PowerShell, les modèles ARM, l’API REST, Python. Cette multiplicité d’outils est une force majeure d’Azure Data Factory, elle permet une grande flexibilité d’usages et un apprentissage facilité par toute une communauté existante de développeurs.
SQL Server Integration Services a beaucoup souffert de la rigidité imposée par un format de fichier (.dtsx) fermé et non facilement modifiable hors de Business Intelligence Development Studio (BIDS)/SQL Server Data Tools (SSDT). Même si certains partenaires avaient développé le Business Intelligence Markup Language (BIML), cela restait difficile à utiliser et à mettre en place en entreprise. Microsoft a entendu le problème et Azure Data Factory n’en souffre pas grâce à ses différents outils permettant de créer des objets Azure Data Factory.
Cet ouvrage présente principalement le portail adf.azure.com, car celui-ci est le plus simple à prendre en main. De plus, il s’agit de la seule façon de réaliser graphiquement des flux dans une approche ETL proche de SSIS. Toutefois, la majorité des exemples est réalisée à partir des modèles JSON, car ceux-ci permettent une lecture simple et exhaustive des propriétés disponibles en s’abstrayant de la lourdeur d’une interface graphique qui parfois n’expose pas certaines propriétés. En outre, le portail ADF permet la modification du JSON depuis son interface graphique.
1. Portail Azure Data Factory
Disponible depuis https://adf.azure.com, le portail en ligne est l’outil le plus simple d’utilisation, celui-ci permettant de réaliser toutes les opérations graphiquement.
Lors de l’accès au portail, il vous est demandé de sélectionner un Azure Active Directory, une souscription Azure ainsi que le nom de l’Azure Data Factory sur lequel vous souhaitez développer.
Cette sélection faite, l’interface de développement et de monitoring d’Azure Data Factory est alors affichée. Trois choix sont offerts à travers...
Azure Data Factory
Le service Azure Data Factory (Fabrique de données v2) est à provisionner au sein d’un groupe de ressources afin de pouvoir par la suite réaliser et exécuter des pipelines et activités. Le service ne permet que peu de configuration, en effet celui-ci a davantage un rôle de centralisation des objets enfants et de monitoring qu’un véritable rôle de moteur d’exécution.
1. Création du service
Lors de la création d’un nouveau service Azure Data Factory, les informations nécessaires sont :
-
Name : le nom du service, celui-ci est unique au sein d’Azure.
-
Subscription : il s’agit de l’abonnement auquel est attachée la ressource, la facturation aura lieu sur celui-ci.
-
Resource Group : le groupe de ressources sur lequel le service sera déployé.
-
Version : les valeurs possibles sont V1, V2 ou V2 with Data Flow (preview). La version actuelle est la V2. La version actuellement en preview concerne Data Flow, celle-ci est disponible uniquement si l’abonnement est autorisé par Microsoft.
-
Location : région sur laquelle sera déployé le service.
Aucune autre information n’est nécessaire, le service Azure Data Factory n’étant pas directement responsable du traitement de la donnée, celui-ci ne nécessite pas de configuration de taille...
Services liés
Les services liés (linked services) permettent de déclarer le lien entre Azure Data Factory et une ressource externe. Il peut s’agir d’une ressource de type stockage de données (Data Store) ou traitement (Compute). Chaque service lié doit utiliser un connecteur supporté par Azure Data Factory qui, en fonction du connecteur (Linked Service Type), nécessitera une configuration personnalisée telle qu’une chaîne de connexion (connection string), ainsi que les informations d’identification associés.
De nombreux connecteurs sont supportés, Microsoft les a séparés en sept catégories principales :
-
Azure : les sources de données Azure telles que le stockage Azure Blob ou Azure Data Lake.
-
Base de données : les bases de données telles que MySQL, Oracle ou SQL Server.
-
NoSQL : les systèmes Not only SQL tels que MongoDB ou Cassandra. À noter que pour pouvoir utiliser des données NoSQL, ADF va nécessiter une mise à plat des données et donc il faudra les structurer fortement.
-
Fichier : les systèmes de fichiers tels que FTP ou HDFS
-
Protocole générique : des protocoles de base tels que le HTTP ou le OData.
-
Services et applications : certains connecteurs ont été développés spécifiquement pour Azure Data Factory...
Integration Runtimes
Concept clé d’Azure Data Factory, l’Integration Runtimes est le moteur de traitement d’ADF, c’est lui qui est en charge de se connecter aux sources de données et de déplacer celles-ci, de réaliser les conversions de types de données, cela afin de réaliser le transfert des données de la source vers la destination.
Dans la section Azure Data Factory, il est indiqué que le service Azure Data Factory n’est pas un moteur d’exécution, en effet le rôle de moteur d’exécution est délégué aux Integration Runtimes.
Il existe trois types d’Integration Runtimes : Azure, Auto-Hébergé et Azure-SSIS. Le schéma ci-dessous explique certaines des différences entre les Integration Runtimes.
1. Azure Integration Runtimes
Par défaut, lors de la création d’un service Azure Data Factory, un Azure Integration Runtimes est provisionné. Celui-ci est nommé AutoResolveIntegrationRuntimes et n’est pas configurable.
Celui-ci est nécessaire afin de pouvoir réaliser des traitements au sein d’ADF, il est en charge de la copie de données, des transformations… c’est la "machine" sur laquelle la logique est exécutée. Puisqu’il s’agit d’un Integration Runtimes Azure, celui-ci ne peut accéder qu’aux ressources disponibles depuis le Cloud public (Internet) et ne peut donc pas se connecter aux ressources des intranets d’entreprises, sauf si celles-ci sont accessibles depuis Internet.
Il est possible de créer des Azure Integration Runtimes supplémentaires afin de pouvoir spécifier la région où provisionner le moteur d’exécution. Dans le cas où celle-ci est "Auto Resolve", la région sera choisie en fonction des opérations à exécuter.
Il est important de s’assurer que la région de l’Integration Runtimes est au plus proche des sources, destinations, ou activités de traitement à réaliser.
La création d’un Azure Integration Runtimes est réalisable via le portail Azure Data Factory :
La seule attention à porter lors de la création est relative au nom qui ne peut contenir que des lettres, des chiffres...
Jeu de données
Un jeu de données (Dataset) permet de décrire et référencer la donnée. Il peut s’agir d’une table de base de données, d’un fichier JSON ou de n’importe quel type de donnée qui servira d’entrée ou de sortie dans une activité.
La définition JSON d’un jeu de données est la suivante :
{
"name": "<nom du jeu de données>",
"properties": {
"type": "<type du jeu de données>",
"linkedServiceName": {
"referenceName": "<nom d'un service lié>",
"type": "LinkedServiceReference",
},
"structure": [
{
"name": "<nom d'une colonne>",
"type": "<type de la colonne>"
}
],
...
Activité
L’activité est l’élément Azure Data Factory en charge d’implémenter les actions à réaliser sur les données. Les activités sont classées dans le portail de la manière suivante : Batch Service, Databricks, Move & Transform, Data Lake Analytics, General, HDInsight, Iteration & Conditionals, Machine Learning.
Le code JSON d’une activité est le suivant :
{
"name": "Nom de l'activité",
"description": "description",
"type": "<Type de l'activité>",
"typeProperties":
{
},
"linkedServiceName": "<Nom du service lié>",
"policy":
{
},
"dependsOn":
{
}
}
-
name : paramètre obligatoire, le nom doit représenter l’action réalisée par l’activité, il est limité à 55 caractères et les caractères suivants ne sont pas autorisés : . ; + ; ? ; / ; < ; > ; * ; % ; & ; : ; \
-
description : paramètre facultatif, il est toutefois conseillé...
Pipeline
Un pipeline Azure Data Factory est un ensemble d’activités. En permettant de réunir plusieurs activités au sein d’un même objet, cela rend possible la mise en place de contraintes d’antécédence, la planification et le monitoring d’un ensemble métier de tâches, ce qui facilite grandement la maintenance. De plus, les pipelines peuvent être paramétrés afin d’augmenter la réutilisabilité de ceux-ci.
La définition JSON d’un pipeline est la suivante :
{
"name": "Nom du pipeline",
"properties":
{
"description": "Description du pipeline",
"activities":
[
],
"parameters": {
}
}
}
-
name : paramètre obligatoire, le nom du pipeline est limité à 140 caractères et les caractères suivants ne sont pas autorisés : . ; + ; ? ; / ; < ; > ; * ; % ; & ; : ; \
-
description : paramètre facultatif, la description n’en est pas moins indispensable ; les API d’Azure Data Factory permettant de récupérer ces informations, cela permet de générer...
Déclencheur
Les déclencheurs (Triggers) permettent l’exécution d’un pipeline basé sur plusieurs types d’évènements : sur planification, sur intervalle, sur évènement.
1. Déclencheur sur planification
Basé sur une horloge, ce déclencheur permet l’exécution des pipelines à heure fixe. Ce déclencheur permet une configuration avancée assez complexe, celle-ci est détaillée ci-dessous en se basant sur le modèle JSON suivant :
{
"properties": {
"name": "<Nom du déclencheur>",
"type": "ScheduleTrigger",
"typeProperties": {
"recurrence": {
"frequency": <<Minute, Hour, Day, Week, Year>>,
"interval": <<int>>,
"startTime": <<datetime>>,
"endTime": <<datetime>>,
"timeZone": "UTC",
"schedule": {
"hours": [<<0-24>>],
"weekDays": [<<Monday-Sunday>>],
"minutes": [<<0-60>>],
"monthDays": [<<1-31>>],
"monthlyOccurrences": [
{
"day": <<Monday-Sunday>>,
"occurrence": <<1-5>>
}
]
}
}
},
"pipelines": [
{
"pipelineReference": {
"type": "PipelineReference",
"referenceName":...
Support des connecteurs
Les différents connecteurs n’offrent pas le même support en ce qui concerne leur utilisation en tant que source ou destination. De plus, certains peuvent être supportés sur l’Integration Runtimes Azure et d’autres sur un Integration Runtimes auto-hebergé. Les matrices ci-dessous récapitulent le support par connecteur ainsi que le type de service lié à indiquer lors de la création de celui-ci. La liste à jour est disponible sur le site de Microsoft https://docs.microsoft.com/fr-FR/azure/data-factory/concepts-datasets-linked-services.
Tous les connecteurs disponibles actuellement sont supportés par l’Integration Runtimes Auto Hébergé (Self Hosted IR).
1. Connecteurs Azure
Connecteur |
Linked Service Type |
Source |
Destination |
Azure IR |
Azure Blob Storage |
AzureBlob- Storage |
X |
X |
X |
Azure Cosmos DB (SQL API) |
CosmosDb |
X |
X |
X |
Azure Data Lake Storage Gen1 |
AzureDataLakeStore |
X |
X |
X |
Azure Data Lake Storage Gen2 (Preview) |
AzureBlobFS |
X |
X |
X |
Azure Database for MySQL |
AzureMySql |
X |
X |
|
Azure Database for PostgreSQL |
AzurePostgreSql |
X |
X |
|
Azure File Storage |
FileServer |
X |
X |
X |
Azure SQL Database |
AzureSql-Database |
X |
X |
X |
Azure SQL Database Managed Instance |
SqlServer |
X |
X |
|
Azure SQL Data Warehouse |
AzureSqlDW |
X |
X |
X |
Azure Search Index |
AzureSearch |
X |
X |
|
Azure Table Storage |
AzureTable-Storage |
X |
X |
X |
2. Connecteurs Base de données
Connecteur |
Linked Service Type |
Source |
Destination |
Azur IR |
Amazon Redshift |
Amazon Redshift |
X |
X |
|
DB2 |
Db2 |
X |
X |
|
Drill (Preview) |
Drill |
X |
X |
|
Google BigQuery |
GoogleBigQuery |
X |
X |
|
Greenplum |
Greenplum |
X |
X |
|
HBase |
HBase |
X |
X |
|
Hive |
Hive |
X |
X |
|
Apache Impala (Preview) |
Impala |
X |
X |
|
Informix |
Odbc |
X |
||
MariaDB |
MariaDB |
X |
X |
|
Microsoft Access |
Odbc |
X |
||
MySQL |
MySql |
X |
X |
|
Netezza |
Netezza |
X |
X |
|
Oracle |
Oracle |
X |
X |
X |
Phoenix |
Phoenix |
X |
X |
|
PostgreSQL |
PostgreSql |
X |
X |
|
Presto (Preview) |
Presto |
X |
X |
|
SAP Business Warehouse |
SapBw |
X |
||
SAP HANA |
SapHana |
X |
X |
|
Spark |
Spark |
X |
X |
|
SQL Server |
SqlServer |
X |
X |
X |
Sybase |
Sybase |
X |
||
Teradata |
Teradata |
X |
||
Vertica |
Vertica |
X |
X |
3. Connecteurs NoSQL
Connecteur |
Linked Service Type |
Source |
Destination |
Azure IR |
Cassandra |
Cassandra |
X |
X |
|
Couchbase (Preview) |
Couchbase |
X |
X |
|
MongoDB |
MongoDb |
X |
X |
4. Connecteurs Fichiers
Connecteur |
Linked Service Type |
Source |
Destination |
Azure IR |
Amazon S3 |
AmazonS3 |
X |
X |
|
File System |
FileServer |
X |
X |
X |
FTP |
FtpServer |
X |
X |
|
HDFS |
Hdfs |
X |
X |
|
SFTP |
Sftp |
X |
X |
5. Connecteurs génériques
Connecteur |
Linked Service Type |
Source |
Destination |
Azure IR |
Generic HTTP |
HttpServer... |