2017-03-10 1 views
1

Est-ce que USQL prend en charge la compression et la décompression d'un fichier?Comment prétraiter et décompresser le fichier .gz dans le magasin Azure Data Lake?

Je voudrais décompresser un fichier compressé pour effectuer quelques validations et une fois qu'ils sont passés, je voudrais compresser les données dans un nouveau fichier.

+0

Azure SQL Data Warehouse peut gérer les fichiers gzippés en mode natif. Les données sont-elles très structurées, c'est-à-dire qu'elles pourraient être insérées dans une table? Si c'est le cas, Polybase peut traiter les fichiers gzippés en mode natif, il serait donc facile de créer une définition de table externe sur le (s) fichier (s) gzip, de les inspecter, etc .. L'avantage de ceci serait qu'aucun code personnalisé supplémentaire n'est requis. Eh bien, vous devrez utiliser un autre produit, Azure SQL Data Warehouse. – wBob

+0

@wbob, Avons-nous des options possibles avec USQL? –

Répondre

1

Selon l'article principal EXTRACT, la méthode U-SQL EXTRACT reconnaît automatiquement le format GZip, vous n'avez donc rien à faire de particulier.

Extraction de données compressées

En général, les fichiers sont transmis comme il est à l'UDO. Une exception est que EXTRACT reconnaît les fichiers compressés GZip avec l'extension de fichier .gz et automatiquement les décompresse dans le cadre du processus d'extraction. L'UDO réel verra les données non compressées. Pour tout autre système de compression, les utilisateurs devront écrire leur propre extracteur personnalisé. Notez que U-SQL a une limite supérieure de 4 Go sur un fichier compressé GZip . Si vous appliquez votre expression EXTRACT à un fichier supérieur à cette limite, l'erreur E_RUNTIME_USER_MAXCOMPRESSEDFILESIZE est levée pendant la compilation du travail.

Il semble que cette fonctionnalité soit disponible depuis un certain temps, mais a été mise à jour en novembre 2016 pour introduire la limite de 4 Go. Voir here.

Voici un exemple simple qui convertit un gzip, fichier séparé par des virgules à pipe séparés:

DECLARE @file1 string = @"/input/input.csv.gz"; 

@file = 
    EXTRACT col1 string, 
      col2 string, 
      col3 string 
    FROM @file1 
    USING Extractors.Csv(silent : true); 


@output = 
    SELECT * 
    FROM @file; 


OUTPUT @output 
TO "/output/output.txt" 
ORDER BY col1 
//FETCH 500 ROWS 
USING Outputters.Text(quoting : false, delimiter : '|');