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 :

[ORACLE 9i] tables externes et Skip column


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut [ORACLE 9i] tables externes et Skip column
    Salut, j'ai un fichier plat délimiter par des ";". Je le charge via une table externe.

    Cependant, je souhaite "suater" certaines colonnes.

    : kk1 à une idée, via un loader il faut utiliser FILLER mais la cela fonctionne pas !

    Merci d'avance

  2. #2
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Si ça marche... Mais peut-être seulement sous certaines conditions. Voila un exemple que j'utilisais pour charger des logs de connection de serveurs (séparateur ";") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    load data
              infile 'D:\maquette_OLAP\donnees\0320041.LOG'
    	    APPEND
    		  into table tous_acces
              fields terminated by ";" optionally enclosed by '"'		  
              ( IP_CLIENT, 
              SERVEUR,
               field1 FILLER,
                DATE_ACCES,
                 field2 FILLER,
                  REQUETE "decode( sign(length(:REQUETE)-400), 1, NULL,:REQUETE)",
                   STATUT_HTTP NULLIF STATUT_HTTP="-",
                    OCTETS NULLIF OCTETS="-",
                     field3 FILLER,
                      NAVIGATEUR "decode( sign(length(:NAVIGATEUR)-300), 1, NULL,:NAVIGATEUR)")
    Tu remarqueras les fieldX qui ne sont pas chargés.

  3. #3
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    L'exemple qu tu donnes est un loader et moi je suis en tables externes :
    Exemple avec longeur fixe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    CREATE TABLE TE_ZIPCODE
    (
      ZIP_CODE  NUMBER(5),
      CITY      VARCHAR2(30 BYTE),
      AREA      VARCHAR2(50 BYTE)
    )
    ORGANIZATION EXTERNAL
      (  TYPE ORACLE_LOADER
         DEFAULT DIRECTORY DATA_DIR
         ACCESS PARAMETERS 
           ( records delimited by newline
            badfile bad_dir : 'zipcode.bad'
            logfile log_dir : 'zipcode.log'
            fields
            (ZIP_CODE   POSITION(1:5)   integer external,
             CITY       POSITION(6:35)  CHAR,
             AREA       POSITION(36:85) CHAR) )
         LOCATION (DATA_DIR:'ZIPCODE.TXT')
      )
    REJECT LIMIT UNLIMITED

  4. #4
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Oups pardon, j'avais mal compris, je croyais que tu VOULAIS utiliser un loader mais que tu n'y arrivais pas. Désolé, fin de journée...

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Je crois pas que c'est possible avec les tables externes d'ignorer une colonne. Ca se comprenait pour SQL*Loader car le chargement d'une colonne inutile entrainait une perte de place. Avec les tables externes, tu n'a plus ce gâchis de place, tu dois déclarer toutes tes colonnes, libre à toi ensuite de les ignorer...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  6. #6
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Citation Envoyé par nuke_y
    Oups pardon, j'avais mal compris, je croyais que tu VOULAIS utiliser un loader mais que tu n'y arrivais pas. Désolé, fin de journée...
    pas de mal au moins tu m'aides

    Citation Envoyé par lalystar

    Je crois pas que c'est possible avec les tables externes d'ignorer une colonne. Ca se comprenait pour SQL*Loader car le chargement d'une colonne inutile entrainait une perte de place. Avec les tables externes, tu n'a plus ce gâchis de place, tu dois déclarer toutes tes colonnes, libre à toi ensuite de les ignorer...
    ok merci.

    C'est bdommage car sur un fichier de 150 colonnes si tu en veux que 10 enfin, je fais faire autrement merci bcp

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Il faut bien comprendre le but de la table externe.
    Celle-ci n'est pas chargée dans une table Oracle comme le ferait Sql*Loader. Elle reste "externe" dans son fichier plat.
    Peu importe alors que vous utilisez 2 colonnes ou 200. cela ne prend aucune place supplémentaire et vous fait économiser tous les ordres Sql*Loader que vous devriez placer pour ne pas lire ces colonnes.

  8. #8
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Juste pour confirmation, j'ai lancé un SQL*Loader avec l'option
    external_table=generate_only pour qu'Oracle me génère le script de création de la table
    correspondante à un fichier de contrôle donné.

    Voici le fichier de contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    LOAD DATA
    INFILE *
    INTO TABLE EMP_NEW
    TRUNCATE
    FIELDS TERMINATED BY ';'
    (
    	EMPNO,
    	ENAME,
    	JOB FILLER,
    	MGR FILLER,
    	HIREDATE FILLER,
    	SAL FILLER,
    	COMM FILLER,
    	DEPTNO
    )
    Et la partie concernée du fichier de log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    CREATE TABLE "SYS_SQLLDR_X_EXT_EMP_NEW" 
    (
      "EMPNO" NUMBER(4),
      "ENAME" VARCHAR2(10),
      "DEPTNO" NUMBER(2)
    )
    ORGANIZATION external 
    (
      TYPE oracle_loader
      DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
      ACCESS PARAMETERS 
      (
        RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
        BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'emp.bad'
        LOGFILE 'emp.log_xt'
        READSIZE 1048576
        FIELDS TERMINATED BY ";" LDRTRIM 
        REJECT ROWS WITH ALL NULL FIELDS 
        (
          "EMPNO" CHAR(255)
            TERMINATED BY ";",
          "ENAME" CHAR(255)
            TERMINATED BY ";",
          "JOB" CHAR(255)
            TERMINATED BY ";",
          "MGR" CHAR(255)
            TERMINATED BY ";",
          "HIREDATE" CHAR(255)
            TERMINATED BY ";",
          "SAL" CHAR(255)
            TERMINATED BY ";",
          "COMM" CHAR(255)
            TERMINATED BY ";",
          "DEPTNO" CHAR(255)
            TERMINATED BY ";"
        )
      )
      location 
      (
        'emp.txt'
      )
    )REJECT LIMIT UNLIMITED
    Tu es donc bien obligé de déclarer toutes tes colonnes.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/10/2011, 16h44
  2. erreurs Oracle sur table externe
    Par Djene dans le forum Oracle
    Réponses: 3
    Dernier message: 10/10/2011, 16h29
  3. Réponses: 3
    Dernier message: 10/10/2007, 13h29
  4. [Oracle 9i] - tables externes
    Par haugoyard dans le forum Oracle
    Réponses: 1
    Dernier message: 02/10/2006, 17h09
  5. [ORACLE 9i] Tables externes
    Par sygale dans le forum Oracle
    Réponses: 3
    Dernier message: 22/12/2004, 15h24

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