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![]()
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![]()
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 ";") :
Tu remarqueras les fieldX qui ne sont pas chargés.
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)")
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
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...![]()
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...)
pas de mal au moins tu m'aidesEnvoyé par nuke_y
Envoyé par lalystar
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
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.
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 :
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 LOAD DATA INFILE * INTO TABLE EMP_NEW TRUNCATE FIELDS TERMINATED BY ';' ( EMPNO, ENAME, JOB FILLER, MGR FILLER, HIREDATE FILLER, SAL FILLER, COMM FILLER, DEPTNO )
Tu es donc bien obligé de déclarer toutes tes colonnes.
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
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...)
Partager