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

SAS Base Discussion :

Création d'index dans SAS via ODBC Teradata


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut Création d'index dans SAS via ODBC Teradata
    Bonjour,

    Je souhaite créer un index lors d'une requête via odbc teradata dans SAS du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Proc sql;
    connect to TERADATA  ( paramètres de connexion);
    execute (database esp_etude) by TERADATA;
    create table lib.tab2 as 
    select *
    from CONNECTION TO TERADATA 
    (
      select *  
      FROM esp_etude.Tab1
     
    );
    disconnect from TERADATA;
    quit;
    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROC SQL ; 
    CREATE INDEX num_tel ON lib.tab2 ; 
    QUIT ;
    Mais j'ai ce genre d'erreur :La fonction MISE A JOUR EN-TETE/VARIABLE n'est pas prise en charge par le moteur TERADATA.
    WARNING: The Table lib.tab2 réside dans une bibliothèque SAS qui ne prend pas en charge l'indexation.

    Comment résoudre ce pb autrement que faire un create table classique en declarant les variables + index + faire un insert car j'ai en effet, plus de 140 colonnes à déclarer .
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Là vous avez une erreur SAS ; je n'ai pas l'impression que vous ayez indiqué les colonnes à indexer.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    si si je l'ai indiqué dans la 2nde requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROC SQL ; 
    CREATE INDEX num_tel ON lib.tab2 ; 
    QUIT ;
    Mon objectif est de savoir s'il est possible de l'indiquer dans une seule requête et bien entendu que cela fonctionne...

  4. #4
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    En fait non

    Dans la requête de création, on donne le nom de l'index (num_tel), la table (lib.tab2) et la colonne (?) sur laquelle il s'appuie. Là, y'a pas de nom de colonne. Vérifie la syntaxe

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    Ok, je complète ma synthaxe soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROC SQL ; 
    CREATE INDEX num_telephone_client ON lib.tab2(num_telephone_client) ; 
    QUIT ;
    Mais j'ai tjs le même message d'erreur:

    ERROR: La fonction MISE A JOUR EN-TETE/VARIABLE n'est pas prise en charge par le moteur TERADATA.
    WARNING: The Table lib.tab2 réside dans une bibliothèque SAS qui ne prend pas en charge l'indexation.NO

    Est ce que cela voudrait dire que les tables SAS ne prennent pas en compte les indexations?

    Et la même synthaxe directement dans Teradata m'indique ceci: Must specify index field(s) for Create index. Je me demande si cette syntaxe de Create Index est reconnu dans le langage SQL?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Non, cette syntaxe est spécifique à SAS.
    Sur Teradata, on crée un index (secondaire) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX (column [, column2, ...]) on DatabaseName.TableName;
    https://docs.teradata.com/reader/scP...eRA~vEYHvvqF9g

    Mais vous pouvez aussi essayer de le faire à la création de la table ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Proc sql;
    connect to TERADATA  ( paramètres de connexion);
    execute (database esp_etude) by TERADATA;
    create table lib.tab2 as 
    select *
    from CONNECTION TO TERADATA 
    (
      select *  
      FROM esp_etude.Tab1
     
    )
    index (num_telephone_client);
    disconnect from TERADATA;
    quit;
    Après je vous questionne quant à l'utilité de dédoubler Tab1.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    Waldar,

    1/En fait Tab1 n'est pas dédoublé car après le select * des champs sont rajoutés via un left join associé à esp_etude.Tab1.(je n'ai juste pas jugé utile de les indiquer).

    2/En effet, je viens de tester la syntaxe sur une table SAS et elle fonctionne correctement .

    3/ je viens également de l'intégrer lors de la creation de la table,et la requête s’exécute finallement et me sort des résultats.Visiblement ça marcherait
    mais avec toutefois ce message :
    WARNING: The number of column names does not match the number of actual columns returned for connection index.

    Du coup la requête ou l' index n'est pas performant car son taux d'occupation sur l'espace(SKEWFACTOR) n'est pas bon :98%.Y' a une erreur quelque part.Il va falloir optimiser ou modifier la requête.

Discussions similaires

  1. [AC-2003] Création d'index dans des sous-requêtes
    Par buzz73 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 06/08/2009, 14h33
  2. [AC-2003] Lier des Vues MySql dans Access via ODBC
    Par njac74 dans le forum Modélisation
    Réponses: 1
    Dernier message: 12/05/2009, 17h36
  3. LIBRAIRY SAS VIA ODBC
    Par sasseur dans le forum Administration et Installation
    Réponses: 4
    Dernier message: 30/10/2008, 17h30
  4. SQL Oracle dans excel via ODBC
    Par noirot70 dans le forum SQL
    Réponses: 0
    Dernier message: 20/06/2008, 12h02
  5. Réponses: 3
    Dernier message: 11/02/2008, 10h05

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