Intégrer des données dans PostgreSQL



Documents pareils
Présentation Windows Azure Hadoop Big Data - BI

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

Olivier Mondet

SQL Historique

Création et Gestion des tables

Devoir Data WareHouse

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Gestion de base de données

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Exercices sur SQL server 2000

Historisation des données

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Les BASES de DONNEES dans WampServer

Le Langage De Description De Données(LDD)

Table des matières 1 DISASTER RECOVERY SAUVEGARDER RESTAURER BASE DE DONNÉS "SUSPECT"... 28

Introduction aux Bases de Données 2004/2005

Notes de cours : bases de données distribuées et repliquées

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Sybase Adaptive Server Enterprise 15

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

PHP 5. La base de données MySql. A. Belaïd 1

Bases de données avancées

Bases de données relationnelles

Ora2Pg Performances. (C) 2013 Gilles Darold

OpenPaaS Le réseau social d'entreprise

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Cours Bases de données 2ème année IUT

Jérôme FESSY. IUT de Paris 5. Base de Données. Cours Introductif. Base de Données

Les déclencheurs. Version 1.0. Grégory CASANOVA

Langage SQL : créer et interroger une base

Le langage SQL (première partie) c Olivier Caron

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

CREATION WEB DYNAMIQUE

L offre décisionnel IBM. Patrick COOLS Spécialiste Business Intelligence

Slony1 2.1 Londiste 3

Cours: Administration d'une Base de Données

Modélisation et Gestion des bases de données avec mysql workbench

Optimisations des SGBDR. Étude de cas : MySQL

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Intégrité des données

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

TP Bases de données réparties

Mysql avec EasyPhp. 1 er mars 2006

Architecture de la plateforme SBC

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Introduction à MySQL (ou MySQL en 3 heures montre en main)

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Configurer la supervision pour une base MS SQL Server Viadéis Services

Support de Cours REQUÊTES TRANSACT-SQL DANS MICROSOFT SQL SERVER Stéphane N GUESSAN Groupe Pigier Abidjan Version 1.

Bases de SQL. Hacks 1-6 CHAPITRE UN

Django et PostgreSQL sous la charge

WDpStats Procédure d installation

HAUTE DISPONIBILITÉ DE MACHINE VIRTUELLE AVEC HYPER-V 2012 R2 PARTIE CONFIGURATION OPENVPN SUR PFSENSE

Mysql. Les requêtes préparées Prepared statements

Réplication logique avec PostgreSQL 9.4

OLAP : Mondrian + Pentaho. Maguelonne Teisseire Hugo Alatrista Salas hugo.alatrista- salas@teledetec9on.fr Flavien Bouillot

Comment Créer une Base de Données Ab Initio

I. MySQL : Serveur et SGBD

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Introduction au langage C

TP Contraintes - Triggers

Corrigés détaillés des exercices

Synchronisation Mysql (Replication)

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Pour les débutants. langage de définition des données

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Installation d'un serveur FTP géré par une base de données MySQL

Pratique et administration des systèmes

Mercredi 15 Janvier 2014

PostgreSQL, le cœur d un système critique

PHP et les Bases de données - Généralités

1/ Présentation de SQL Server :

Cours SQL. Base du langage SQL et des bases de données

The new consumables catalogue from Medisoft is now updated. Please discover this full overview of all our consumables available to you.

L export de SAS vers Excel expliqué à ma fille

PostGIS, un module de PostgreSQL pour les données spatiales

les techniques d'extraction, les formulaires et intégration dans un site WEB

Bases de Données Réparties

Nuxeo 5.4 : les nouveautés

Installation et Mise en œuvre de MySQL

Administration des bases de données. Jean-Yves Antoine

PostgreSQL. Formations. Catalogue Calendrier... 8

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Introduction au Système de Gestion de Base de Données et aux Base de Données

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Transcription:

Intégrer des données dans PostgreSQL PGDAY France 2014 Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh 6 juin 2014 Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 1 / 35

Dimitri Fontaine 2ndQuadrant France PostgreSQL Major Contributor pgloader prefix, skytools apt.postgresql.org CREATE EXTENSION CREATE EVENT TRIGGER Bi-Directional Réplication pginstall imitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 2 / 35

pgloader : Intégrer des données dans PostgreSQL http://pgloader.io/ Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 3 / 35

pgloader : Open Source, github https://github.com/dimitri/pgloader Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 4 / 35

pgloader : Charger des données http://pgloader.io/ Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 5 / 35

Importer depuis des fichiers CSV http://pgloader.io/howto/csv.html Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 6 / 35

Importer depuis des fichiers dbase III http://pgloader.io/howto/dbase.html Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 7 / 35

Importer depuis des fichiers SQLite http://pgloader.io/howto/sqlite.html Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 8 / 35

Importer depuis une connection MySQL http://pgloader.io/howto/mysql.html Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 9 / 35

Importer depuis une connection MySQL http://pgloader.io/howto/mysql.html Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 10 / 35

pgloader : Transformer les données à la volée http://pgloader.io/ Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 11 / 35

pgloader : version 3 Version 1 en TCL, version 2 en Python, version 3 en Common Lisp Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 12 / 35

pgloader : charger des données rapidement Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 13 / 35

Retour d utilisation, v2 contre v3 select rows, v2, v3, round(( extract(epoch from v2) / extract(epoch from v3))::numeric, 2) as speedup from timing; rows v2 v3 speedup ---------+-------------------+-----------------+--------- 4768765 @ 37 mins 10.878 @ 1 min 26.917 25.67 3115880 @ 36 mins 5.881 @ 1 min 10.994 30.51 3865750 @ 33 mins 40.233 @ 1 min 15.33 26.82 3994483 @ 29 mins 30.028 @ 1 min 18.484 22.55 (4 rows) Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 14 / 35

COPY La commande copy sera toujours plus rapide que pgloader, mais sa gestion des échecs est limitée. Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 15 / 35

Fonctionnalités de pgloader pgloader propose bien plus que copy Gestion des erreurs avec des fichiers de rejet de données Transformation des données à la volée Language de commande évolué pour spécifier le travail à réaliser Architecture parallèle, IO asynchrones Support de nombreux formats Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 16 / 35

On passe du fichier de configuration [pgsql] base = pgloader client_encoding = latin1 pg_option_standard_conforming_strings = on null = "" empty_string = "\ " [csv] table = csv format = csv filename = csv/csv.data field_size_limit = 512kB field_sep =, quotechar = " columns = x, y, a, b, d:6, c:5 only_cols = 3-6 skip_head_lines = 1 truncate = True Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 17 / 35

À la commande LOAD CSV FROM inline (x, y, a, b, c, d) INTO postgresql:///pgloader?csv (a, b, d, c) WITH truncate, skip header = 1, fields optionally enclosed by ", fields escaped by double-quote, fields terminated by, SET client_encoding to latin1, work_mem to 12MB, standard_conforming_strings to on Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 18 / 35

À la commande BEFORE LOAD DO $$ drop table if exists csv; $$, $$ create table csv ( a bigint, b bigint, c char(2), d text ); $$; Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 19 / 35

Exemples de sources de données FROM stdin FROM inline (a, b, c) FROM data/2013_gaz_113cds_national.txt FROM FILENAME MATCHING ~/GeoLiteCity-Location.csv/ FROM ALL FILENAMES MATCHING ~/ALIOR/ FROM ALL FILENAMES MATCHING ~/F[A-Z]{4}1[45] OZ20/ FROM http://www.census.gov/geo/maps-data/ data/docs/gazetteer/places2k.zip FROM http://www.insee.fr/fr/methodes/nomenclatures/ cog/telechargement/2013/dbf/historiq2013.zip Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 20 / 35

pgloader : Transformer les données à la volée http://pgloader.io/ Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 21 / 35

Transformation de données FROM FILENAME MATCHING ~/GeoLiteCity-Blocks.csv/ WITH ENCODING iso-8859-1 ( startipnum, endipnum, locid ) INTO postgresql:///ip4r?geolite.blocks ( iprange ip4r using (ip-range startipnum endipnum), locid ) Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 22 / 35

Transformation de données FROM FILENAME MATCHING ~/GeoLiteCity-Location.csv/ ( locid, country, region null if blanks, city null if blanks, postalcode null if blanks, latitude, longitude, metrocode null if blanks, areacode null if blanks ) INTO postgresql:///ip4r?geolite.location ( locid, country, region, city, postalcode, location point using (format nil "(~a,~a)" longitude latitude), metrocode, areacode ) Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 23 / 35

Migration complète de MySQL à PostgreSQL http://www.galaxya.fr/ Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 24 / 35

Pour Galaxya, utilisation des outils habituels Mais les vrais problèmes ne sont pas résolus... mysql2pgsql, puis édition manuelle du schema SELECT INTO OUTFILE sur le server, puis COPY Le client MySQL prétend donner du CSV avec une redirection On ajoute toujours une étape awk ou sed On trouve quelques scripts en Python et en Ruby Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 25 / 35

MySQL et les types de données Text vide ou NULL, valeurs par défaut, dates à 0000-00-00, int(11), float(20,2), tinyint mais pas de boolean, sets, encodage,... Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 26 / 35

MySQL : édition des règles de transtypages LOAD DATABASE FROM mysql://root@unix:/tmp/mysql.sock:/goeuro INTO postgresql://dim@unix:/tmp:/godollar CAST type datetime to timestamptz drop default drop not null using zero-dates-to-null, column bools.a to boolean drop typemod using tinyint-to-boolean, type char when (= precision 1) to char keep typemod, column enumerate.foo using empty-string-to-null Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 27 / 35

MySQL : MATERIALIZE VIEWS Changer de schéma pendant la migration, c est possible MATERIALIZE VIEWS foo, d as $$ select cast(d as date) as d, count(*) as n from plop where d > 2013-10-02 group by cast(d as date); $$ Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 28 / 35

Limites de pgloader Il reste beaucoup de travail Vues (dialectes SQL différents) Triggers Procédures Stockées Types de données géométriques Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 29 / 35

Les autres bases de données supportées Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 30 / 35

À suivre Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 31 / 35

De nouvelles sources de données Chargement avec éventuelle normalisation des données imitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 32 / 35

De nouvelles connections imitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 33 / 35

Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 34 / 35

Questions? Now is the time to ask! Dimitri Fontaine dimitri@2ndquadrant.fr @tapoueh Intégrer des données dans PostgreSQL 6 juin 2014 35 / 35