2017-10-12 4 views
1

J'essaie d'extraire un nom de dossier du magasin data lake et de l'afficher en tant que colonne dans le fichier csv. Existe-t-il un moyen d'extraire le nom entier du dossier ou des parties du nom de dossier via USQL? Par exemple /input/Testing - Je veux le Testing.USQL, extraire le nom de fichier en sortie

Je sais que vous pouvez extraire le nom du fichier et le mettre dans une colonne virtuelle comme ceci:

// Filesets, file set with virtual column 

@q = 
EXTRACT rowId int, 
     filename string, 
     extension string 
FROM "/input/filesets example/{filename}.{extension}" 
USING Extractors.Tsv(); 


@output = 
SELECT filename, 
     extension, 
     COUNT(*) AS records 
FROM @q 
GROUP BY filename, 
     extension; 


OUTPUT @output TO "/output/output.csv" 
USING Outputters.Csv(); 

See pic here.

Répondre

2

Vous pouvez utiliser la fonctionnalité {virtual_column} en tout lieu dans le chemin (non seulement pour nom de fichier et extension), et le projeter plus tard. Cela fonctionne:

@q = EXTRACT 
     rowId int, 
     folder string, 
     filename string, 
     extension string 
    FROM "/input/{folder}/{filename}.{extension}" 
    USING Extractors.Tsv(); 

@output = 
    SELECT folder, 
     filename, 
     extension, 
     COUNT(*) AS records 
    FROM @q 
    GROUP BY folder, 
     filename, 
     extension; 

Cependant, notez que la colonne à l'aide virtuel dans le chemin que vous obtenez également des fonctionnalités génériques (vous pick-up tous les dossiers dans le cas où vous avez plus d'un) ...

+1

Avoir un prédicat sur la colonne virtuelle pour s'assurer que vous obtenez seulement le dossier que vous voulez, par exemple 'WHERE dossier ==" yourFolder ";' – wBob

+0

Quand j'essaye d'exécuter le code ci-dessus, il indique que le 'dossier' de colonne virtuelle n'est pas défini dans l'instruction EXTRACT . – FutureTony

+0

Lorsque j'essaie d'exécuter le code ci-dessus, j'ai ajouté une chaîne de dossier dans l'instruction extract et mes résultats sont revenus avec une entrée vide. – FutureTony