2017-04-06 3 views
1

Je teste les performances pour différents types de sélection à partir d'une source DB externe.Sélection des performances à partir d'un ensemble de lignes externe

  1. EXTERNE Datasource_Identifier
  2. EMPLACEMENT csharp_string_literal
  3. EXECUTE csharp_string_literal

Je suis intéressé par la performance, parce que le type 3 (EXECUTE) est efficace en cas de clause WHERE. Est-ce que je fais quelque chose de mal, ou c'est normal qu'U-SQL lise d'abord toutes les lignes de la table externe et les filtre ensuite dans ADLA (le même comportement pour LOCATION)?

C'est un problème/inefficace dans le cas où ma table est très grande et j'ai besoin d'utiliser juste une partie des lignes de la table. Puis-je forcer U-SQL à filtrer les données avant de les lire depuis la table EXTERNAL ou depuis LOCATION? Le problème est que j'ai besoin d'une instruction WHERE dynamique basée sur une variable.

Répondre

2

D'abord, vous contrôlez la possibilité d'envoyer des prédicats à votre moteur SQL Server avec la clause REMOTABLE_TYPES sur votre objet DATA SOURCE. Ensuite, le prédicat doit être distant. Si vous faites un prédicat avec une jointure avec un ensemble de lignes U-SQL (table), il peut ne pas être facile de le télécommander efficacement (je ne suis pas sûr si nous mappons encore une jointure dans un semijoin). Puisque vous semblez être en mesure de distancer le prédicat que vous utilisez dans le EXECUTE, je pense qu'il y a de bonnes chances que vous puissiez écrire les requêtes dans les autres cas de manière à pouvoir être distant. Mais sans voir les requêtes, il est difficile de dire à coup sûr.

Si vous voulez que nous jetions un coup d'oeil, s'il vous plaît contactez-moi par email (usql à microsoft dot com).