2017-06-20 2 views
0

J'ai des milliers de fichiers CSV contenant spanning de janvier 2016 à aujourd'hui. Je veux charger tous les fichiers du 25 novembre 2016 jusqu'au 02 janvier 2017.u-sql: Chargement de fichiers dans un script u-sql

Je sais que je peux utiliser le chemin virtuel comme ci-dessous, mais ne chargera-t-il pas toutes mes données du disque? Je ne veux que des données de la période ci-dessus. Est-ce que l'ajout de la requête @result (en la modifiant à ma période de temps) m'assure que seuls les fichiers qui m'intéressent sont chargés en mémoire?

DECLARE @file_set_path2 string = @dir + "{date:yyyy}/{date:MM}/{date:dd}/{date:MM}{date:dd}{date:yyyy}.csv"; 
 

 
@data = 
 
    EXTRACT vala int, 
 
      valb long, 
 
      valc DateTime, 
 
      date DateTime // virtual file set column 
 
    FROM @file_set_path2 
 
    USING Extractors.Csv(); 
 

 
@result = 
 
SELECT * 
 
FROM @data 
 
WHERE date > DateTime.Parse("2016-11-24") 
 
AND date < DateTime.Parse("2017-01-03");

Répondre

1

Si le prédicat compare aux valeurs que le compilateur peut voir (par exemple, des constantes, des expressions pliables constantes ou paramètres de script) et le prédicat peut être déplacé (par exemple, vous utilisez AND et dans le prédicat pour la conjonction), l'optimiseur ne touchera que les fichiers dans la plage spécifiée. Donc, la requête ci-dessus devrait être bien.

Vous devriez recevoir un avertissement si le prédicat n'est pas l'un des précédents.

Si vous n'obtenez pas ce comportement, s'il vous plaît faites le moi savoir.