Hacked By Nerox
Accueil du site > Hacked By Nerox > Lecture de fichiers CSV avec H2

Lecture de fichiers CSV avec H2

samedi 20 mars 2010, par michaelm

1 - Téléchargement et installation de la base de données H2

La base de données H2 est téléchargeable sur le site du projet H2.

Téléchargez l’installateur windows si vous êtes sur une machine windows ou l’installateur multi-plateformes dans le cas contraire.

En double cliquant sur l’installateur, vous installez à la fois le moteur de base de données, et un client léger qui permet de s’y connecter via une interface web.

2 - Trois bases de données en une

H2 vous permet de créer 3 types principaux de bases de données.

Base de données serveur Pour une application professionnelle ou internet. Une base de données serveur utilise le protocole d’accès suivant :

jdbc:h2:tcp://<servername>[:<port>]/[<path>]<databaseName>

Base de données locale (ou embarquée) Pour une utilisation de type bureautique (ex. pour remplacer access), où la base de données n’est interrogée que par un utilisateur à la fois, on utilise le protocole suivant :

jdbc:h2:[file:][<path>]<databaseName>

Base de données en mémoire Pour manipuler de petits volumes de données rapidement, il existe un protocole où toutes les données sont gérées dans la mémoire physique de votre ordinateur :

jdbc:h2:mem:

3 - Créer une base de données locale (ou embarquée)

Si vous lancez H2, votre navigateur par défaut s’ouvre avec une boite de dialogue vous invitant à vous connecter à une base de données existante ou à créer une nouvelle base de données.

En choisissant Generic H2 (embeded) dans les configurations enregistrées vous paramétrez l’accés à une nouvelle base de données :

- de type local (embeded)
- située dans votre répertoire utilisateur (symbolisé par le tilda)
- qui s’appelle test (à changer en "TP_H2/MaBase" pour les besoins de l’exercice)
- à laquelle vous pourrez vous connecter en utilisant le nom d’utilisateur ’sa’ et sans mot de passe (remplacez ces valeurs par celles qui vous conviennent)

Connectez-vous.

Un fichier MaBase.h2.db est créé dans le répértoire TP_H2. Un deuxième fichier l’accompagne tant que la base est ouverte (MaBase.lock.db)

Dans l’interface utilisateur, vous voyez apparaitre sur le panneau de gauche :

- le nom de la base : jdbc:h2 : /TP_H2/MaBase
- un répertoire INFORMATION_SCHEMA qui contient toutes les tables système de la base
- le numéro de version du moteur de base de données

Dans le panneau de droite, vous avez :
- une zone de texte pour taper vos instructions SQL
- quelques explications sur le fonctionnement de l’interface

4 - Récupérer des données à partir d’un fichier csv (ou tabulé)

Récupérer le fichier tabulé mis à disposition et enregistrez-le sur votre disque dans le répertoire C :/TP_H2.

Pour lire cette table dans h2, on utilise la commande CSVREAD.

Cette commande prend un seul paramètre obligatoire, le nom du fichier, et plusieurs paramètres facultatifs.
- 1 - Nom du fichier : ’chemin et nom du fichier’
- 2 - En-tête : NULL (fichier avec en-tête) ou nom des colonnes (séparés par le même séparateur que les données elles-mêmes)
- 3 - Encodage : NULL (encodage natif) ou encodage à utiliser (ex. ’UTF8’)
- 4 - Séparateur : NULL (si le fichier utilise la virgule comme séparateur) ou le caractère servant de séparateur sinon. Une tabulation étant difficile à insérer dans un formulaire, on peut utiliser la fonction CHAR(9) pour signifier que c’est une tabultaion qui sert de séparateur
- 5 - Délimiteur : NULL (pas de délimiteur) ou le délimiteur de texte à utiliser (le csv utilise des guillemets pour délimiter des champs incluant eux-mêmes le séparateur de champ)
- 6 - Caractère d’échappement : NULL ou le caractère d’échappement utilisé pour les caractères spéciaux
- 7 - Chaîne nulle : NULL ou la chaîne à utiliser pour désigner un NULL au sens SQL

Le fichier DEP_VAR_POP.txt peut ainsi être interrogé en tapant dans la zone de texte :

CALL CSVREAD('C:/TP_H2/DEP_VAR_POP.txt', NULL, NULL, CHAR(9));

Les deux premiers NULL signifient qu’on utilise la ligne d’en-tête du fichier texte pour nommer les colonnes, et que l’on interprète le fichier en utilisant la table de caractères native (Cp1252 pour windows).

Il peut être nécessaire de remplacer le deuxième NULL par ’Cp1252’ à partir d’une machine linux.

CHAR(9) définit la tabulation comme séparateur

5 - Plus loin avec CSVREAD et CSVWRITE

Accéder à une ressource distante

H2 peut accéder à une ressource distante de la même façon qu’à une ressource locale. Ainsi, on peut accéder directement à notre fichier en ligne :

CALL CSVREAD('http://geo.michaelm.free.fr/H2/resources/DEP_VAR_POP.txt',NULL,NULL,CHAR(9));

Interroger le fichier en utilisant le langage SQL

SELECT * FROM CSVREAD('C:/TP_H2/DEP_VAR_POP.txt',NULL,NULL,CHAR(9)) WHERE VARPOP1999_2008 >= 1;

Ici, on a rajouter une condition sur les données à afficher.

Formatter la première colonne en utilisant les fonctions disponibles

La première colonne contient à la fois le numéro et le nom du département.

- Utiliser les fonctions SUBSTRING et LOCATE pour extraire chacune des parties qui nous intéresse et pour les placer dans une colonne distincte.
- Utiliser REPLACE pour normaliser l’écriture des nombres en remplaçant les virgules par des points et les espaces par rien du tout.
- utiliser la syntaxe attribut ::type pour "transtyper" les colonnes texte résultantes en nombres.

SELECT SUBSTRING("DÉPARTEMENT", 1, LOCATE(' ',"DÉPARTEMENT")) AS NUMDEP,
          SUBSTRING("DÉPARTEMENT", LOCATE(' ',"DÉPARTEMENT")+1) AS NOMDEP,
          REPLACE(REPLACE(POP2008,',','.'),' ','')::NUMERIC AS POP,
          REPLACE(REPLACE(VARPOP1999_2008,',','.'),' ','')::NUMERIC AS VAR
FROM CSVREAD('C:/TP_H2/DEP_VAR_POP.txt',NULL,NULL,CHAR(9));

- SUBSTRING extrait les premiers caractères jusqu’au premier blanc rencontré, dont la position est identifié par LOCATE(’ ’, "DÉPARTEMENT")
- Le double REPLACE change les virgules par des points puis enlève les espaces.
-  ::NUMERIC transforme le champ de type texte en champ de type numerique (il faut bien sur que le contenu de la colonne ne contienne que des nombres bien formattés, d’où le traitement précédent).

Créer une table structurée et pérenne dans votre base de données

Ce code est le même que le précédent, sauf qu’on a inséré une instruction CREATE TABLE VARPOP AS devant.

CREATE TABLE VARPOP AS
   SELECT SUBSTRING("DÉPARTEMENT", 1, LOCATE(' ',"DÉPARTEMENT")) AS NUMDEP,
          SUBSTRING("DÉPARTEMENT", LOCATE(' ',"DÉPARTEMENT")+1) AS NOMDEP,
          REPLACE(REPLACE(POP2008,',','.'),' ','')::NUMERIC AS POP,
          REPLACE(REPLACE(VARPOP1999_2008,',','.'),' ','')::NUMERIC AS VAR
   FROM CSVREAD('C:/TP_H2/DEP_VAR_POP.txt',NULL,NULL,CHAR(9));

Exporter cette nouvelle table dans un fichier texte tabulé

L’instruction suivante écrit la table nouvellement créée et bien reformattée dans un nouveau fichier texte.

CALL CSVWRITE('C:/TP_H2/NEW_DEP_VAR_POP.txt', 'SELECT * FROM VARPOP', CHAR(9));

Se référer à la documentation de CSVWRITE pour les options.

Noter que l’on peut aussi exporter le résultat d’une requête plus complexe comme :

CALL CSVWRITE('C:/TP_H2/EVO_MOYENE.txt', 'SELECT ''EVO_MOYENNE'', SUM(POP*VAR)/SUM(POP) AS MOYENNE FROM VARPOP', NULL, CHAR(9));

Cette requête calcul l’évolution de population moyenne pour toute la France (somme des variations pondérées par la population divisée par la population totale) et écrit le résultat dans un fichier texte.

4 Messages de forum

  • Lecture de fichiers CSV avec H2 23 octobre 2013 09:31, par ad22321Yot

    Dies klingt for being kühl ob Kinder (von 0-13) tend zu be das Tragen von Hüftensprung-Waldland shoes oder Frauen sind wearing Stiefel mit Strandkleidern..Any Zeit you getragen diese Handtasche upon your Schulter, es muß always be wunderbar..The corporate louis vuitton online shop Garantien 100 Prozent Spitzenqualität and also freie Schiffahrt zu designs. ?.

  • Lecture de fichiers CSV avec H2 23 octobre 2013 09:58, par ad2423823E

    With die Hilfe von Louis’ Sohn Georgie, the corporate fing an, sich zu bieten das basic Warenzeichen monogrammierte Leinwand regarding Handtaschen und duffels..wir MySpace Comments Tips auf wie to Entdecken Sie Sachen, daß Put auf für sale auf eBay durch Marktanalyse einer von the Hauptschritte, um aufzutreten, before commencing Produkte auf eBay zu verkaufen, ist Markt research. ?.The-Gegenteil Wege vom Bekommen settled wird zusammen angeordnt beneath the louis vuitton tasche Begriff Aufführungsmarketing ? of der this ist, dort ist, wo der Begriff angliedert, most important benutzt auch. ?.

  • Lecture de fichiers CSV avec H2 23 octobre 2013 10:26, par ad22044brO

    hermes bags wurde über hohe-Profil-Klientel gewöhnlich gemacht that include eine Tasche rief this Kelly Behälter, rief subsequently after louis vuitton taschen Grace Kelly ; sie hat gemacht a Handvoll von ihr Aussehen über the Software, und auch Konstanz get Tasche.. ?????????? Dort is als a riesiger Unterschied zwischen a Leder und das Säumen from Schwindler Hermes Taschen und Hermes Portemonnaies und the wirklicher Hermes Design..It wird sein, important daß Sie Ihren Gürtel gleichkommen, while using Farbe des Stiefels and ja it seien Sie vielleicht sogar a kluge Idee zu passen Sie die Farbe zusammen on your Jacke mit Ihr boot..

  • Lecture de fichiers CSV avec H2 23 octobre 2013 10:53, par ad2883FZZ

    Eine Windeltasche ist, an louis vuitton online shop wesentliche Lagerungstasche along with mehrere Taschen-wie-Räume that wirklich certainly benutzt zu tragen all der things von jemandem, der ist, gebraucht handling ein Baby..Ist Ihr Ziel zu schneiden, your allowance durch irgendeinen fertigen Betrag oder are Sie currently das Aufmöbeln vollständig Ihr life..You Ihnen auch also entschließen Sie die Größe with the Fischtank durch taking in consideration die Art von Fisch Sie want in Ihrem Fisch gas tank. ?.

SPIP | squelette | | Plan du site | Suivre la vie du site RSS 2.0