2017-06-07 3 views
0

Je souhaite regrouper des ensembles de données en fonction de valeurs uniques dans une colonne et les enregistrer dans plusieurs fichiers.comment écrire une requête usql pour la sortie vers plusieurs fichiers

Mon problème est identique à celle qui est déjà décrit ici au lien: U-SQL Output in Azure Data Lake

Comme je suis nouveau à USQL langue, je suis incapable de mettre en œuvre la deuxième étape de réponse. Je suis incapable de comprendre comment écrire usql requête pour exécuter le script usql généré de la première partie de la réponse

+0

Vous ne pouvez pas écrire en U-SQL qui exécute d'autres U-SQL, c'est-à-dire que l'U-SQL dynamique n'est pas supporté. Ce que vous faites est 1) ouvrez le script généré et exécutez-le vous-même ou 2) exécutez-le via Data Factory 3) exécutez-le via Powershell etc – wBob

Répondre

0

Si le nombre de groupes est connu à l'avance, vous pouvez écrire un USQL stocké procedure qui prendrait comme paramètre 1) la valeur du groupe 2) le nom du fichier.

Dans le pseudo-code ci-dessous, le nom du fichier final est déterminé par la valeur sous-jacente du groupe. Les données à scinder proviennent d'une table USQL (référencée dans le pseudo-code as).

DROP PROCEDURE IF EXISTS splitByGroups; 
CREATE PROCEDURE splitByGroups(@groupValue string, @file_name_prefix string = "extract") 
AS 
BEGIN 
    DECLARE @OUTPUT string = "/output/" + file_name_prefix + "_"+ @groupValue + ".csv"; 

     OUTPUT (
     SELECT * 
     FROM <MyTable> 
     WHERE <MyGroup> == @groupValue 
    ) 
     TO @OUTPUT 
     USING Outputters.Csv(outputHeader : true); 
END; 

Vous pouvez ensuite exécuter la procédure stockée autant de fois que vous avez des groupes:

splitByGroups("group1", DEFAULT); 
splitByGroups("group1", DEFAULT); 

Alternativement, si vous souhaitez analyser les multiples fichiers hors connexion, je télécharger le fichier complet et utiliser la shell (PowerShell ou Linux Shell) pour diviser le fichier.