Accueil A propos Tech Stack Projets Blog
Retour au Blog

Auto-Ingestion SharePoint →
Delta Tables dans Fabric

Comment automatiser l'ingestion de fichiers CSV/Excel depuis SharePoint vers des Delta Tables dans Microsoft Fabric avec Logic App, OneLake Shortcuts et PySpark — zéro intervention manuelle.

Sommaire
  1. Le problème : ingestion manuelle depuis SharePoint
  2. Architecture de la solution
  3. Étape 1 — Lakehouse et OneLake Shortcut
  4. Étape 2 — Configuration metadata-driven
  5. Étape 3 — Notebook PySpark d'ingestion
  6. Étape 4 — Pipeline Fabric
  7. Étape 5 — Logic App Azure (automatisation)
  8. Test end-to-end et résultats
  9. Troubleshooting : les pièges rencontrés
  10. Analyse des coûts

Dans beaucoup d'organisations, les équipes métier déposent des fichiers critiques (CSV, Excel) sur SharePoint : rapports de ventes, données clients, exports financiers. Mais importer manuellement ces fichiers dans un Lakehouse à chaque nouveau dépôt, c'est chronophage, risqué et ne passe pas à l'échelle.

Et si chaque fichier déposé dans un dossier SharePoint était automatiquement ingéré dans une Delta table dans Microsoft Fabric — sans aucune intervention humaine ?

Dans cet article, je vous montre une solution production-ready que j'ai construite et testée : fichier SharePoint → Logic App → Pipeline Fabric → Delta table. De bout en bout, entièrement automatisé.

01. Le problème : ingestion manuelle depuis SharePoint

Voici le scénario typique que vivent la plupart des équipes data :

  • Les utilisateurs métier uploadent des fichiers CSV/Excel sur SharePoint régulièrement
  • Un data engineer doit manuellement télécharger, transformer et charger les données
  • Si le fichier change, le processus recommence de zéro
  • Aucun audit trail, aucune automatisation, aucune scalabilité

Ce workflow manuel crée des goulots d'étranglement et des retards dans la disponibilité des données. Nous avons besoin d'un pipeline event-driven qui réagit instantanément quand un fichier arrive sur SharePoint.

02. Architecture de la solution

SharePoint (fichiers CSV/XLSX)
    |
    v
Azure Logic App (trigger : fichier créé/modifié)
    |
    v  HTTP POST --> Fabric Pipeline API
    |
LoadSharePoint_Pipeline
    |
    +-- LoadSharepoint.ipynb (notebook principal)
    |   +-- Lecture fichier via OneLake shortcut
    |   +-- Application config metadata (Fabric.csv)
    |   +-- Sanitization des noms de colonnes
    |   +-- Écriture Delta table (merge ou overwrite)
    |
    +-- Notification email (succes/echec)

La beaute de cette architecture tient dans sa simplicite : 4 composants, entièrement managés, coût quasi-nul.

Composant Rôle Coût
OneLake Shortcut Lien direct vers SharePoint (zéro copie) Gratuit
Fabric Notebook Lecture + transformation + écriture Delta Inclus dans la capacité
Fabric Pipeline Orchestration + passage de parametres Inclus dans la capacité
Logic App (Consumption) Détection fichier + déclenchement pipeline ~0.01€/mois

03. Étape 1 — Lakehouse et OneLake Shortcut

La première étape consiste à créer un Lakehouse dans Fabric capable de voir directement les fichiers SharePoint, sans aucun job de copie ou de synchronisation.

1Créer le Lakehouse

Dans votre workspace Fabric, créez un nouveau Lakehouse nomme LH_SharePoint.

2Créer le shortcut OneLake

  1. Naviguez vers Files > clic droit > New shortcut
  2. Sélectionnez SharePoint comme source
  3. Entrez l'URL de votre site SharePoint
  4. Parcourez la bibliothèque de documents et sélectionnez le dossier cible (ex : FabricTest)
  5. Nommez le shortcut FabricTest
Création du shortcut OneLake vers SharePoint

Capture : Création d'un shortcut OneLake vers une bibliothèque SharePoint

Création du shortcut OneLake pointant vers le dossier FabricTest sur SharePoint

Une fois créé, les fichiers SharePoint sont visibles directement dans le Lakehouse sous Files/FabricTest/ — aucune duplication de données, aucun ETL, juste un lien en direct.

Fichiers SharePoint visibles dans le Lakehouse

Capture : Fichiers CSV visibles dans le Lakehouse via le shortcut OneLake

Les fichiers CSV SharePoint sont accessibles directement depuis le Lakehouse

Point clé

Le shortcut cree une vue en direct des fichiers SharePoint dans OneLake. Les fichiers ne sont pas copiés — ils sont lus à la demande. Cela signifie zéro coût de stockage côté Fabric.

04. Étape 2 — Configuration metadata-driven

Le fichier de métadata Fabric.csv contrôle comment chaque fichier est traité. Uploadez-le dans Files/Metadata/ de votre Lakehouse.

Colonne Description Exemple
FullFolderPath Shortcut + nom fichier (sans extension) FabricTest/orders
LoadType full (overwrite) ou delta (merge) full
UniqueKey Colonnes pour le merge delta OrderId,OrderDate
Header Numéro de ligne du header (0 = première) 0
SkipRow Nombre de lignes à sauter 0
SilverTableName Nom custom de la table (sinon auto) silver_orders

Cette approche metadata-driven signifie que vous pouvez intégrer de nouveaux fichiers sans changer une seule ligne de code — il suffit d'ajouter une ligne au CSV.

05. Étape 3 — Notebook PySpark d'ingestion

Le notebook LoadSharepoint est le cœur de la solution. Il gère à la fois les fichiers CSV et Excel, avec sanitization automatique des colonnes et support du merge Delta.

Décisions de conception

  • Résolution dynamique du chemin : le notebook reçoit juste le nom du fichier et construit le chemin complet via le shortcut
  • Traitement métadata-driven : type de chargement, clés de merge et noms de tables sont tous configurables
  • Sanitization des colonnes : les caractères spéciaux sont supprimés pour assurer la compatibilité Delta
  • Évolution de schéma : quand une table existe déjà, le notebook cast les colonnes source pour matcher le schéma cible

Configuration et extraction du chemin

PYSPARK LoadSharepoint.ipynb — Configuration
# Configuration du shortcut
SHORTCUT_NAME = "FabricTest"

# Paramètre du pipeline (injecté par Fabric Pipeline)
FullPath = "sales_details.csv"  # Valeur par défaut pour tests manuels

# Extraction des details du fichier
parts = FullPath.strip("/").split("/")
FileName = parts[-1].split(".")[0]
FileExt = parts[-1].split(".")[-1]

# Construction du chemin via le shortcut
file_path = f"Files/{SHORTCUT_NAME}/{parts[-1]}"
Important

La valeur FullPath = "sales_details.csv" dans le notebook est juste une valeur par défaut pour les tests manuels. Quand le pipeline est déclenché par la Logic App, cette valeur est automatiquement remplacée par le vrai nom du fichier.

Logique de merge Delta

PYSPARK LoadSharepoint.ipynb — Merge
def mergeTableData(metadatadf, source_df, tbl_name=None):
    source_df = sanitizeColumnsName(source_df)

    if (spark.catalog.tableExists(tbl_name)
        and metadatadf.select("LoadType").first()[0] == "delta"):
        # Delta merge sur les cles uniques
        target_table = DeltaTable.forName(spark, tbl_name)
        target_table.alias("target") \
            .merge(source_df.alias("source"), merge_condition) \
            .whenMatchedUpdateAll() \
            .whenNotMatchedInsertAll() \
            .execute()
    else:
        # Full overwrite
        source_df.write.format("delta") \
            .mode("overwrite") \
            .saveAsTable(tbl_name)

Traitement CSV et Excel

PYSPARK LoadSharepoint.ipynb — Processing
if FullPath.lower().endswith('.csv'):
    source_df = spark.read.option("header", True).csv(file_path)
    mergeTableData(metadatadf, source_df)

elif FullPath.lower().endswith('.xlsx'):
    all_sheets = pd.read_excel(
        excel_file_path,
        sheet_name=None,
        engine='openpyxl',
    )
    # Chaque feuille devient sa propre table Delta
    for sheet_name, pdf in all_sheets.items():
        source_df = spark.createDataFrame(pdf)
        mergeTableData(metadatadf, source_df, sheet_table)
Exécution du notebook LoadSharepoint

Capture : Notebook LoadSharepoint en cours d'exécution

Le notebook traite le fichier CSV et crée la Delta table automatiquement

Convention de nommage : les tables sont auto-nommées silver_{shortcut}_{filename}. Par exemple :

  • cust_info.csvsilver_fabrictest_cust_info
  • sales_details.csvsilver_fabrictest_sales_details
  • LOC_A101.csvsilver_fabrictest_loc_a101

06. Étape 4 — Pipeline Fabric

Le pipeline orchestre l'exécution du notebook et gère les notifications succès/échec.

  1. Créez un nouveau Data Pipeline nomme LoadSharePoint_Pipeline
  2. Ajoutez un paramètre : FullPath (type String)
  3. Ajoutez une activité Notebook (Run_LoadSharepoint) :
    • Notebook : LoadSharepoint
    • Base parameter : FullPath = @pipeline().parameters.FullPath
    • Lakehouse : LH_SharePoint
Pipeline LoadSharePoint dans Fabric

Capture : Pipeline LoadSharePoint_Pipeline avec l'activité Notebook

Pipeline avec l'activité Notebook et le mapping du paramètre FullPath

Pipeline succeeded

Capture : Pipeline exécuté avec succès

Premier test manuel : pipeline exécuté avec succès, Delta table créée

07. Étape 5 — Logic App Azure (automatisation)

C'est ici que la magie opère — la Logic App surveille SharePoint et déclenche le pipeline automatiquement.

ACréer la Logic App

  1. Dans le portail Azure, créez une Logic App (Consumption)
  2. Nommez-la la-fabricsharepoint-copy
  3. Region : même que votre workspace Fabric (ex : France Central)
Création Logic App dans Azure

Capture : Création de la Logic App Consumption dans le portail Azure

Création de la Logic App en mode Consumption (pay-per-execution)

Attention au plan

Choisissez Consumption (pas Standard). Le plan Consumption facture ~0,000025€ par action — vous ne paierez quasiment rien pour cette charge. Le plan Standard coûte beaucoup plus cher et n'est pas nécessaire ici.

BActiver le Managed Identity

  1. Allez dans Settings > Identity
  2. Activez le System assigned managed identity
  3. Copiez l'Object ID
Managed Identity activé sur la Logic App

Capture : Managed Identity activée

Managed Identity system-assigned activee — pas de mots de passe, pas de clés API

CAccorder les permissions dans Fabric

  1. Dans Fabric, allez dans votre workspace > Manage access
  2. Cliquez Add people or groups
  3. Cherchez la-fabricsharepoint-copy
  4. Assignez le role Contributor

DConfigurer le workflow

Trigger SharePoint :

ParamètreValeur
Site AddressURL de votre site SharePoint
Library NameVotre bibliothèque de documents
Folder/Shared Documents/FabricTest
Interval3 minutes

Action HTTP — POST vers l'API Fabric :

ParamètreValeur
MethodPOST
URIhttps://api.fabric.microsoft.com/v1/workspaces/{id}/items/{id}/jobs/instances?jobType=Pipeline
HeadersContent-Type: application/json
AuthenticationManaged Identity
Audiencehttps://api.fabric.microsoft.com
JSON HTTP Body
{
  "executionData": {
    "parameters": {
      "FullPath": "@{triggerOutputs()?['body/{FilenameWithExtension}']}"
    }
  }
}
Workflow Logic App complet

Capture : Workflow complet de la Logic App

Workflow complet : trigger SharePoint → HTTP POST vers l'API Fabric

Piège critique

L'audience d'authentification doit etre https://api.fabric.microsoft.comPAS https://analysis.windows.net/powerbi/api. L'audience Power BI ne fonctionne pas pour l'API REST Fabric. C'est un bug subtil qui fait échouer le pipeline en moins d'1 seconde, sans message d'erreur explicite.

08. Test end-to-end et résultats

Le moment de vérité : déposons un nouveau fichier CSV dans le dossier SharePoint FabricTest et observons le flux complet.

  1. Upload d'un fichier LOC_A101.csv dans SharePoint
  2. ~3 minutes plus tard, la Logic App détecte le fichier
  3. La Logic App envoie un HTTP POST a l'API Fabric avec FullPath = LOC_A101.csv
  4. Le pipeline démarre et le notebook s'exécute
  5. La table silver_fabrictest_loc_a101 est créée automatiquement
Logic App run succeeded

Capture : Logic App exécutée avec succès

Logic App : trigger SharePoint (0.3s) + HTTP action (1m 2s) — les deux en succès

Réponse HTTP 200 de l'API Fabric

Capture : Réponse HTTP 200 de l'API Fabric

L'API Fabric retourne 200 avec le statut "InProgress" — le pipeline est lancé

3 Delta tables créées automatiquement

Capture : Tables Delta créées automatiquement dans le Lakehouse

Résultat final : 3 Delta tables créées automatiquement — zéro intervention manuelle

Workspace Fabric avec le dossier FabricSharepoint

Vue globale du workspace Fabric — Lakehouse, SQL endpoint, Notebook et Pipeline

Résultat final

  • silver_fabrictest_cust_info — données clients (835 KB)
  • silver_fabrictest_sales_details — détails de ventes (3 MB)
  • silver_fabrictest_loc_a101 — données localisation (393 KB) — créée automatiquement par la Logic App

09. Troubleshooting : les pièges rencontrés

Pendant la construction de cette solution, j'ai rencontré plusieurs problèmes. Voici ce que j'ai appris :

Piège 1 : Pipeline échoue en moins d'1 seconde

Symptome : La Logic App retourne 200, mais le pipeline Fabric échoue instantanément.

Cause : Mauvaise audience d'authentification dans l'action HTTP.

JSON Avant (incorrect)
// Ne fonctionne PAS avec l'API Fabric
"audience": "https://analysis.windows.net/powerbi/api"
JSON Après (correct)
// L'audience correcte pour l'API Fabric
"audience": "https://api.fabric.microsoft.com"

Piège 2 : PATH_NOT_FOUND

Symptome : AnalysisException: [PATH_NOT_FOUND] Path does not exist

Cause : Le shortcut OneLake n'a pas encore synchronisé le nouveau fichier.

Solution : Rafraîchir le Lakehouse et attendre 2-5 minutes. Les shortcuts SharePoint ne sont pas instantanés — il y a un délai de synchronisation pour les nouveaux fichiers.

Piège 3 : IndexError dans le notebook

Symptome : IndexError: list index out of range

Cause : Le code original attendait un chemin complet SharePoint comme comme Shared Documents/FabricTest/file.csv, mais la Logic App envoie juste le nom du fichier.

Solution : Simplifier l'extraction du chemin pour gérer les deux cas :

PYTHON Fix
parts = FullPath.strip("/").split("/")
FileName = parts[-1].split(".")[0]  # Toujours le dernier élément
FileRootFolder = SHORTCUT_NAME  # Utiliser le nom du shortcut, pas le parsing du chemin

Piège 4 : Managed Identity non trouvé dans Fabric

Cause : Le managed identity de la Logic App n'a pas été ajouté au workspace Fabric.

Solution : Ajouter le managed identity comme Contributor dans Manage access du workspace.

10. Analyse des coûts

Cette solution est remarquablement économique :

Composant Coût
Logic App (Consumption) ~0.01€/mois (quelques triggers/jour)
OneLake Shortcut Gratuit (zéro duplication)
Fabric Notebook Inclus dans la capacité Fabric
Fabric Pipeline Inclus dans la capacité Fabric
Total additionnel ~0€ au-delà de la capacité Fabric existante

Key Takeaways

  • OneLake shortcuts sont un game-changer pour connecter SharePoint a Fabric sans duplication de données
  • Le design metadata-driven rend la solution évolutive — intégrez de nouveaux fichiers en ajoutant une ligne CSV, pas du code
  • Logic Apps (Consumption) offrent une automatisation event-driven quasi-gratuite avec une sécurité Managed Identity
  • L'audience de l'API Fabric (https://api.fabric.microsoft.com) est différente de celle de Power BI — un piège classique
  • Le support Delta merge permet de gérer les rechargements complets et incrémentaux avec le même notebook

Conclusion

Construire un pipeline automatique SharePoint-vers-Fabric est plus simple qu'on ne le pense. Avec des OneLake shortcuts, un notebook PySpark, un pipeline Fabric et une Logic App, vous pouvez créer un flux d'ingestion production-ready en quelques heures — pour un coût additionnel quasi-nul.

L'insight clé est que l'integration de Fabric avec l'ecosysteme Microsoft est son superpower. Les shortcuts OneLake, l'authentification Managed Identity et l'API REST Fabric fonctionnent ensemble de manière transparente pour rendre possible des scénarios qui nécessiteraient une infrastructure complexe sur d'autres plateformes.

Si vous avez des questions ou rencontrez des problèmes, n'hésitez pas à me contacter sur LinkedIn !

Sources & References