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

Firebird Discussion :

Import massif/table externe et real [Archives]


Sujet :

Firebird

  1. #1
    Rédacteur

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 32
    Points
    32
    Par défaut Import massif/table externe et real
    Bonjour,

    Je souhaite faire une importation massive (10.000.000 lignes) dans une table. J'ai consulté le précédent thread sur le sujet ainsi que le tutorial associé

    Toutefois, je ne sais pas comment faire ma table externe avec des nombres réels à l'intérieur tout en conservant l'alignement. Ma table est définie par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE "WAYPOINTS" 
    (
      "ID_WAYPOINT"	 INTEGER NOT NULL,
      "WP_NOM"	 CHAR(8) CHARACTER SET ASCII NOT NULL,
      "WP_COMMENTAIRE"	 VARCHAR(20) CHARACTER SET ISO8859_1,
      "WP_LATITUDE"	 DOUBLE PRECISION NOT NULL,
      "WP_LONGITUDE"	 DOUBLE PRECISION NOT NULL,
      "WP_ALTITUDE"	 INTEGER,
    CONSTRAINT "PK_WAYPOINTS" PRIMARY KEY ("ID_WAYPOINT")
    );
    Je fais comment avec les DOUBLE PRECISION? et INTEGER d'ailleurs aussi?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    Je me fais moi même la réponse. En fait, on décide juste de la longueur qu'on veut. Et on fait ensuite des varchar à la longueur correspondante.

    Par exemple, j'avais des real pas très précis à importer. J'ai mis ça dans mon générateur de fichier à importer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    writeln(Dest,Format('%.8d%9.6f%9.6f', [N,Real1,Real2]));
    Ca fait un entier sur 8 chiffres. Et des réels avec 9 caractères dont 6 chiffres après la virgule (mes réels sont entre -1 et 1).

    Ensuite, la séquence SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE "T_EXTERNAL" EXTERNAL FILE 'C:\Documents and Settings\Eric\Bureau\test.txt'
    (
    	"ID"          char(8),
    	"REAL1"            char(9),
    	"REAL2"          char(9),
    );
    Ca marche bien sous Windows en local. Par contre, je n'arrive pas à le faire fonctionner sous Linux/FB1.5 ...

  3. #3
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Dans le tuto, il est fait mention de:

    1/ la modif du fichier de configuration de FB, en as-tu tenu compte ?

    2/ la nécessité de décrire, dans la table externe, les caractères de fin de ligne : #13#10 en windows, mais uniquement #10 sous unix. Je ne les vois pas dans ton create table...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    Oui, pardon, j'ai un peu simplifié mon exemple mais il y a bien un varchar(2) à la fin pour le retour à la ligne. Et ceci même sous Linux car j'ai généré le fichier sous Windows et il contient toujours #13#10 à la fin de chaque ligne.

    J'ai aussi mis ExternalFileAccess = Full dans le firebird.conf de mon serveur. De même que j'ai fait un chmod 777 sur mon fichier externe pour que tout le monde puisse y accéder.

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    Pour les retours à la ligne, je confirme qu'il suffit d'être cohérent entre le fichier généré et la structure de la table. J'ai poussé le vice jusqu'à ne pas mettre de retour à la ligne dans mon fichier puis d'importer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE T_EXTERNAL EXTERNAL FILE '/opt/firebird/perso/france.txt'
    (
        ID_WP          char(8),
        NOM            char(8),
        COMMENTAIRE    char(20),
        LAT            char(9),
        LONGI          char(9),
        ALTI           char(5)
    );
    C'est bon.

    Pour mon problème, il fallait redémarrer firebird pour prendre en compte ExternalFileAccess = Full.

  6. #6
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Salut,

    Citation Envoyé par Eric Sibert
    Pour mon problème, il fallait redémarrer firebird pour prendre en compte ExternalFileAccess = Full.
    Merci pour le retour d'information.
    Je vais modifier cela dès que possible.

    Sujet résolu ?
    CV :
    - LinkedIn
    - Viadeo

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    Oui, sujet résolu. J'ai réussi à importer mes 5 millions de ligne

    Par contre, le coup de redémarrer firebird n'a pas été si simple que ça. Sous Linux, la méthode n'est pas la même si on est en Classic ou en SuperServer. J'étais dans le second cas. Il fallait faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    service firebird restart
    Sauf que ça refusait pour des problèmes de mot de passe. Car le mot de passe est stocké en dur dans le script de redémarrage ainsi appelé (qui se trouve en /etc/init.d). Et moi j'avais changé le mot de passe alors le script n'était plus à jour.

    Si ça peut aider les suivant. En tout cas, ton tutoriel m'a bien aidé

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    Un dernier message pour compléter.

    A la fin, quand vous avez terminé toutes vos importations, n'oubliez pas de remettre le ExternalFileAccess = None (et de redémarrer FireBird ) car c'est une grosse source de vulnérabilité les tables externes.


    PS : en fait, en version Classic, il n'y a pas à redémarrer le serveur vu que rien ne tourne et qu'une nouvelle instance est démarrée à chaque requête/connexion.

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

Discussions similaires

  1. FireBird Import Table Externe
    Par jcharles dans le forum Bases de données
    Réponses: 6
    Dernier message: 09/12/2009, 22h06
  2. Réponses: 1
    Dernier message: 19/02/2008, 00h32
  3. Comment exporter / importer une table postgres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 01/03/2005, 18h22
  4. [ORACLE 9i] Tables externes
    Par sygale dans le forum Oracle
    Réponses: 3
    Dernier message: 22/12/2004, 15h24
  5. [ORACLE 9i] tables externes et Skip column
    Par sygale dans le forum SQL
    Réponses: 7
    Dernier message: 17/11/2004, 05h13

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