IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Partitionner les resultats d'une requete


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Par défaut Partitionner les resultats d'une requete
    Bonjour,

    Afin d'ameliorer les performances de mon ETL je souhaite partitionner les resultats d'une requete en plusieurs morceaux qui seront par la suite traités en parallèle.

    J'ai une clé primaire sur ma table mais elle est pas dense (les valeurs se suivent pas, ya des trous).
    Bref j'aimerais pouvoir obtenir les intervalles de clé primaire qui permetterait de decouper la ma table en n morceau de volumen (ou nombre de lignes) equivalent.

    J'ai cherché du côté de partition over mais sans succès.

    Si vous avez des idées je suis preneur ca fait un bout de temps que je me casse la tete dessus.

    Merci d'avance!!!

    ps: ma clé primaire est de type varchar (donc je peux pas faire de fonctions numeriques dessus) => c'est pas moi qui est choisi ca, c'est que c'est une table provenant de siebel!

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    regarde cette discution sur AskTom.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Par défaut
    Merci mnitu pour ta reponse, malheureusement je ne peux pas utiliser le "parallel query" parce que je n'ai pas la main sur la db.
    (En gros, j'accède a la table a travers une vue qui elle meme pointe sur une table sur une autre db (via un db link) qui se trouve en amerique du nord.)

    De plus, je voudrais pouvoir decouper ma requete de maniere a obtenir n sets de données de façons a avoir n pipelines dans mon mapping ETL par la suite....

    Donc il faut absolument que je trouve un moyen de determiner comment decouper une table par en n morceaux de volume equivalent...

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Quand on parle de partition c'est plutôt au niveau des tables que celà se passe, au niveau des requêtes on parle plutôt de parallélisme.

    Que fait votre flux exactement, copier une table en amérique et la ramener en local chez vous ? Quelle est la volumétrie de vos données ?

    Vous pouvez utiliser le dernier caractère de votre PK, ou son code ascii, ou la somme des chiffres de tous les codes ascii de la clef, en général on retrouve des volumétrie sensiblement équivalente.

    Mais attention de bien vérifier que le temps nécessaire à ce découpage n'est pas supérieur à celui de tout prendre en direct, car si la table n'est pas optimisée pour envoyer des données en parallèle il n'est vraiment pas sûr que vous soyez gagnant.

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Karibou Voir le message
    Merci mnitu pour ta reponse, malheureusement je ne peux pas utiliser le "parallel query" parce que je n'ai pas la main sur la db.
    ...
    Ce n'était pas pour le "parallel query" mais plutôt pour le DIY

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Par défaut
    Ayest j'ai trouvé.

    Il y a une fonciton analytique oracle qui permet de faire ca: la fonction ntile().

    Dans mon cas, si j'ai une table de 3 colonnes, avec col1 etant ma clé, et que je veux 'diviser' les resultats en 4 groupe de volument (nombre de lignes) equivalent, il me suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select 
    col1, 
    col2, 
    col3, 
    ntile(3), ntile(4) OVER(ORDER BY col1) AS groupe
    From matable
    group by col1

    Et apres pour obtenir chacun des groupes separement, je filtre sur groupe=1 (ou 2, ou 3 ou 4).

    Voila.

    Merci pour votre aide.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Et apres pour obtenir chacun des groupes separement, je filtre sur groupe=1 (ou 2, ou 3 ou 4).
    Comment faites vous pour filter sur un groupe parce que moi j'ai un message errreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    matricule,
    ntile(10) OVER(ORDER BY matricule) AS groupe 
    FROM matricule
    where GROUPE = 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL Error: ORA-00904: "GROUPE": invalid identifier
    00904. 00000 -  "%s: invalid identifier"
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Compter les resultats d'une requetes malgré un LIMIT.
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/10/2006, 20h53
  2. modifier les resultats d'une requete SQL
    Par billyboy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/05/2006, 06h22
  3. [MySQL] mettre les resultats d'une requete dans un select
    Par Ludo75 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/01/2006, 16h19
  4. afficher les resultats d'une requete mysql sur 3 colonnes
    Par harlock59 dans le forum Requêtes
    Réponses: 7
    Dernier message: 24/12/2005, 14h38
  5. [debutant]compter les resultat d'une requete
    Par christophebmx dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/02/2005, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo