2017-10-05 4 views
1

Je voudrais utiliser l'instruction if-else pour décider à quel endroit je dois exporter des données. Mon cas est:Azure Data Lake - Conditions

  1. -je extraire plusieurs fichiers à partir du stockage blob bleu azur (il est possible qu'il n'y ait pas de fichiers !!).
  2. Je calcule le nombre d'enregistrements dans l'ensemble de fichiers.
  3. Si le nombre d'enregistrements est supérieur à 20, j'exporte les fichiers dans un emplacement de rapport spécifique
  4. Si l'ensemble de fichiers ne contient aucun enregistrement, je dois générer un fichier vide factice dans un emplacement différent, car je ne souhaite pas remplacer le rapport existant par rapport vide.

La solution peut être confection IF..ELSE. Le problème est que si je calcule le nombre d'enregistrements, j'ai une variable rowset et je ne peux pas le comparer avec une variable scalaire.

@RECORDS = 
SELECT COUNT(id) AS IdsCount 
FROM @final; 


IF @RECORDS <= 20 THEN //generate dummy empty file 
    OUTPUT @final_result 
    TO @EMPTY_OUTPUT_FILE 
    USING Outputters.Text(delimiter : '\t', quoting : true, encoding : Encoding.UTF8, outputHeader : true, dateTimeFormat : "s", nullEscape : "NULL"); 
ELSE 
    OUTPUT @final_result 
    TO @OUTPUT_FILE 
    USING Outputters.Text(delimiter : '\t', quoting : true, encoding : Encoding.UTF8, outputHeader : true, dateTimeFormat : "s", nullEscape : "NULL"); 
END; 
+0

Qu'est-ce que vous essayez de faire est d'utiliser la variable rowset comme scalaire un. Ce n'est pas possible en usql pour l'instant. Voir [this] (https://stackoverflow.com/q/40094944/2417043) et [this] (https://stackoverflow.com/q/41394628/2417043) questions. – arghtype

Répondre

1

L'instruction IF de U-SQL est actuellement utilisée uniquement pendant la compilation. Ainsi, vous pouvez faire quelque chose comme

IF FILE.EXIST() THEN 

Mais si vous voulez générer différents fichiers en fonction du nombre d'enregistrements que vous auriez à écrire au SDK/niveau CLI:

Le premier travail écrit une température sortie de fichier (et peut-être un fichier d'état qui contient le nombre de lignes). Ensuite, vous vérifiez (par exemple dans Powershell) si le fichier est vide (ou quel que soit le critère que vous voulez utiliser) et si ce n'est pas le cas, copiez le résultat sinon créez le fichier de sortie vide.