1

Nous construisons une solution rapide d'application/de recherche rapide qui consiste à charger des fichiers CSV mensuels à partir de fichiers de stockage sur site dans des tableaux blob/SQL Azure. Il y a 4 fichiers avec chacun 50000 lignes et le nom du mois est apposé dans le nom du fichier. Quelle est la méthode la plus connue de transfert de ces fichiers dans blob ou de stockage tout en assurant que nous récupérons le nom du mois à partir du fichier, les anciens fichiers sur les dossiers on-premise sont ignorés et seuls les nouveaux sont chargés.Chargement de fichiers CSV récurrents dans Azure db à partir de On-premises

Dans le passé, nous pouvions utiliser SSIS pour prendre en charge facilement ce comportement, mais je suis à la recherche d'une solution basée sur le cloud telle que Data Factory.

J'ai essayé de créer Azure Blob sur site mais je ne suis pas en mesure d'éviter le transfert de fichiers anciens ni de récupérer le nom de fichier (bien que je puisse éventuellement utiliser insertion/date de modification).

Des suggestions? Des idées?

Merci,

+1

données Factory est certainement l'outil pour le faire. Il a des fonctions de date et d'heure, par exemple [ici] (https://docs.microsoft.com/en-us/azure/data-factory/data-factory-functions-variables) pour vous aider. – wBob

Répondre

1

Vous pouvez utiliser tout téléchargement de stockage Blobs ou lac Azure Data Store (potentiellement orchestrées avec ADF) et préserver la structure du nom de fichier.

Ensuite, vous pouvez utiliser Azure Lac Data Analytics et U-SQL pour cuire les fichiers dans un fichier CSV à l'aide EXTRACT et OUTPUT déclarations où vous utilisez ce qu'on appelle la syntaxe de jeu de fichiers à la fois pivoter le nom de fichier/dossier dans l'ensemble de lignes et de l'utilisation un prédicat pour limiter la plage de fichiers à traiter. Ce travail U-SQL peut à nouveau être orchestré et paramétré via ADF. Enfin, utilisez ADF pour déplacer le fichier résultant vers SQL Azure ou si vous utilisez SQL DW, vous pouvez utiliser Polybase sur le CSV résultant.

Voici un exemple simple d'un script pseudo U-SQL:

DECLARE EXTERNAL @begin_date = DateTime.Parse("2017-06-01"); 
DECLARE EXTERNAL @end_date = DateTime.Parse("2017-06-08"); 

@data = EXTRACT col1 int, col2 string, date DateTime 
     FROM "/path/file_{date:yyyy}_{date:MM}_{date:dd}.csv" 
     USING Extractors.Csv(); 

@data = SELECT * FROM @data WHERE date BETWEEN @begin_date AND @end_date; 

OUTPUT @data TO "/output/cookeddata.csv" USING Outputters.Csv(); 
+0

Existe-t-il un guide étape par étape pour y parvenir? –

+0

Ce qui précède est à peu près étape par étape contour :). Vous pouvez trouver des livres blancs et des démos sur les pages de documentation Azure Data Lake, ADF et SQL Datawarehouse qui peuvent vous montrer les étapes individuelles décrites ci-dessus. Je vais mettre une description de l'expérience de bout en bout à mon carnet de commandes. –

+0

Merci. Je pense que je comprends la solution en principe maintenant et je vais probablement travailler cette semaine. Cependant, je ne suis toujours pas clair sur la façon dont le travail U-SQL peut être orchestré et paramétré via ADF? Où dans l'ADF puis-je me connecter avec des emplois USQL? –

2

J'ai eu les mêmes besoins il y a quelques semaines et j'ai décidé d'opter pour une solution qui utilise des fonctions Azure et l'Azure SQL natif Capacités BULK.

La fonction Azure peut être déclenchée dès qu'un fichier est copié dans un Blob Store (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob). Vous pouvez avoir accès à tous les attributs de fichier et donc aussi au nom de fichier. La fonction Azure appellera alors une procédure dans Azure SQL en transmettant le nom de fichier CSV détecté afin qu'il puisse être importé en bloc dans une table de votre choix, avec toutes les propriétés nécessaires.

exemple de code complet et des instructions détaillées sont disponibles ici:

https://github.com/yorek/AzureFunctionUploadToSQL