2017-09-11 1 views
0

Je suis en train d'écrire un travail Web qui traite les données sauvegardées dans le compte de stockage azure dans un format
mystorage/data/{aaaa}/{MM}/{dd } /app.csvAzure Job BlobTrigger chemin d'accès au format de l'année mois jour dans le chemin

ce que je veux faire maintenant Blobtrigger est le suivant

void Foo(BlobTrigger(" mystorage/data/{yyyy}/{MM}/{dd}/app.csv") Stream message, TextWriter log) 
{ 
} 

est-ce possible? Je veux que la date du jour soit analysée en yyyy, MM et dd. Fondamentalement, le blob doit être déclenché en fonction de la date du jour qui fait partie du chemin du fichier dans le blob.

+0

Vous ne pouvez pas créer de blobs en tant que structure de fichier. Vous devriez jeter un oeil à Stockage de fichiers https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction – Fals

+0

Absolument c'est possible. J'ai un pipeau ADF qui crée cette structure dans le compte de stockage blob –

+0

Avez-vous vraiment besoin de créer un sous-dossier/conteneur? peut-être vous devriez juste utiliser un modèle de fichier comme celui-là {aaaa} - {MM} - {dd} -app.csv. Je ne pense pas que blobtrigger gérera le nom de dossier dynamique, juste le nom de blob dynamique – Thomas

Répondre

0

Oui, vous pouvez déclencher une fonction Azure pour de tels blobs. Voici un exemple de définition de fonction:

[FunctionName("Blob")] 
public static void Blob(
    [BlobTrigger("mystorage/data/{yyyy}/{MM}/{dd}/app.csv")] Stream message, 
    string yyyy, 
    string MM, 
    string dd, 
    TraceWriter log) 
{ 
    log.Info($"Found {yyyy}-{MM}-{dd}"); 
} 

Il sera déclenché si vous créez un objet BLOB appelé par ex. data/2017/09/12/app.csv dans le conteneur mystorage.

Notez qu'il ne validera pas les parties de date, il les prendra comme des chaînes simples: par exemple, data/A/B/C/app.csv sera également traité. Vous pouvez changer le type de paramètres d'entrée en int, mais cela entraînera une exception de liaison pour les chemins non numériques. L'analyse manuelle de la date doit cependant être triviale:

if (DateTime.TryParse($"{yyyy}-{MM}-{dd}", out DateTime date)) 
{ 
    log.Info($"Found {date}"); 
}