Gérer les nombres avec une notation scientifique dans Pentaho Data Integration

Dans le cas de figure d’un fichier .csv comportant des nombres ayant une notation scientifique (exemple : 7.8e-005), il est faut suivre les étapes suivantes pour pouvoir les utiliser correctement en tant que nombres :

  • paramétrer le typage du champs comme chaîne de caractère (« String ») dans le step d’extraction,
  • si besoin, remplacer le e minuscule par un E majuscule avec le step « Remplacer dans chaînes de caractères »,
  • utiliser l’onglet « Méta-données » du step « Altération structure flux » pour modifier le typage du champs en « Big Number ».

L’import dans une base PostgreSQL se déroule ensuite sans difficulté si le champs en base est typé comme double precision.

Sources :

Publicités

Modifier le typage d’un champ géométrique avec PostgreSQL

 

Le typage d’un champ géométrique dans PostgreSQL permet d’inclure le type de géométrie souhaité (il est également possible de l’inclure en tant que contrainte).

Mais un typage initial trop restrictif (multi-polygones alors que l’on souhaite également inclure des polygones) peut parfois poser problème lors de l’insertion de données.

Exemple :

the_geom(Multipolygon,2154)

Il est alors nécessaire de modifier le typage du champ géométrique comme suit :

ALTER TABLE my_table ALTER COLUMN the_geom TYPE geometry(Geometry,2154);

Source :

Opérations de maintenance sous PostgreSQL

Sources :

Supprimer les fonctions d’une base de données PostgreSQL

Pour supprimer les fonctions d’une base de données PostgreSQL, on utilisera la requête suivante (avec précaution !) :

SELECT 'DROP FUNCTION ' || ns.nspname || '.' || proname || '(' || oidvectortypes(proargtypes) || ');'
FROM pg_proc INNER JOIN pg_namespace ns ON (pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'my_messed_up_schema' order by proname;

Source : http://www.postgresonline.com/journal/archives/74-How-to-delete-many-functions.html

Utiliser des flux WFS dans PostGIS avec l’extension ogr_fdw

Il est possible de visualiser des flux WFS sur un serveur PostGreSQL/PostGIS en utilisant l’extension ogr_fdw qui conjugue les fonctionnalités de la librairie OGR et de l’extension Foreign Data Wrapper (postgres_fdw).

Installation des extensions nécessaires

Via pgAdmin, par exemple :

CREATE EXTENSION postgis;
CREATE EXTENSION ogr_fdw;

Interrogation du flux WFS avec ogr_fdw_info

Ou utilise ensuite l’utilitaire ogr_fdw_info pour connaître la liste des couches servies par le flux (avec un serveur PostGreSQL 9.6 sur Windows).

Pour connaître le fonctionnement d’ogr_fdw_info, on utilise la commande :

cd "C:\Program Files\PostgreSQL\9.6\bin"
ogr_fdw_info -help

Elle renvoie les usages suivants :

usage: ogr_fdw_info -s <ogr datasource> -l <ogr layer>
ogr_fdw_info -s <ogr datasource>
ogr_fdw_info -f

L’option -f permet de connaître les différents formats supportés :

ogr_fdw_info -f

On retrouve dans la liste l’item « WFS » (read only) qui permet avec l’option -s de paramétrer l’interrogation du serveur.

Dans cet exemple, on cherche à récupérer la couche des obstacles à l’écoulement en Métropole du SANDRE. L’adresse du flux provient de la fiche de métadonnées du lot de données :

ogr_fdw_info -s "WFS:http://services.sandre.eaufrance.fr/geo/obs_FXX"

La commande renvoie le résultat suivant :

Layers:
  sa:ObstEcoul

On peut donc interroger le serveur pour connaître la structure de cette couche :

ogr_fdw_info -s "WFS:http://services.sandre.eaufrance.fr/geo/obs_FXX" -l sa:ObstEcoul

Création du serveur distant

La commande précédente génère automatiquement la requête SQL (à exécuter dans pg Admin, par exemple) pour créer le serveur :

CREATE SERVER myserver
  FOREIGN DATA WRAPPER ogr_fdw
  OPTIONS (
    datasource 'WFS:http://services.sandre.eaufrance.fr/geo/obs_FXX',
    format 'WFS' );

Création de la table distante

On peut ensuite créer la table distante :

CREATE FOREIGN TABLE sa_obstecoul (
  fid bigint,
  msgeometry Geometry(Geometry,4326),
  gml_id varchar,
  cdobstecoul varchar,
  stobstecoul varchar,
  cdmodevalidobstecoul varchar,
  lbmodevalidobstecoul varchar,
  cdetouvrage varchar,
  lbetouvrage varchar,
  nomprincipalobstecoul varchar,
  nomsecondaireobstecoul varchar,
  cdtypeouvrage varchar,
  lbtypeouvrage varchar,
  coordxpointcarouvrage real,
  coordypointcarouvrage real,
  typecoordpointcarouvrage varchar,
  cdtypedispfranchpiscicole1 varchar,
  lbtypedispfranchpiscicole1 varchar,
  cdtypedispfranchpiscicole2 varchar,
  lbtypedispfranchpiscicole2 varchar,
  cdtypedispfranchpiscicole3 varchar,
  lbtypedispfranchpiscicole3 varchar,
  cdtypedispfranchpiscicole4 varchar,
  lbtypedispfranchpiscicole4 varchar,
  cdtypedispfranchpiscicole5 varchar,
  lbtypedispfranchpiscicole5 varchar,
  cdtypeelmobseuil1 varchar,
  lbtypeelmobseuil1 varchar,
  cdtypeelmobseuil2 varchar,
  lbtypeelmobseuil2 varchar,
  cdtypeelmobseuil3 varchar,
  lbtypeelmobseuil3 varchar,
  cdtypedispfranchnavig1 varchar,
  lbtypedispfranchnavig1 varchar,
  cdtypedispfranchnavig2 varchar,
  lbtypedispfranchnavig2 varchar,
  cdtypedispfranchnavig3 varchar,
  lbtypedispfranchnavig3 varchar,
  cdusageobstecoul1 varchar,
  lbusageobstecoul1 varchar,
  cdusageobstecoul2 varchar,
  lbusageobstecoul2 varchar,
  cdusageobstecoul3 varchar,
  lbusageobstecoul3 varchar,
  cdusageobstecoul4 varchar,
  lbusageobstecoul4 varchar,
  hautmaxter varchar,
  hautchutetobstecoul varchar,
  cdhautchutclobstecoul varchar,
  lbhautchutclobstecoul varchar,
  datemajobstecoul varchar,
  datevalidobstecoul varchar,
  grenobstecoul varchar,
  ouvragelie varchar,
  idtronconhydrograelt varchar,
  nomentitehydrographique varchar,
  cdtronconhydrographique varchar,
  cdentitehydrographique varchar,
  cdzonehydro varchar,
  idtronconhydrobdtopo varchar,
  cddepartement varchar,
  lbdepartement varchar,
  cdcommune varchar,
  lbcommune varchar,
  numcircadminbassin varchar,
  nomcircadminbassin varchar,
  cdeumassedeau varchar,
  altipointcarouvrage real,
  nomlimitehydrographique varchar,
  denmaxouvrage real,
  pkobstecoul real
) SERVER myserver
OPTIONS (layer 'sa:ObstEcoul');

Si le serveur et la table ne sont pas visibles dans pgAdmin, il faut vérifier dans Fichier > Préférences > Affichage que les cases pour les options « Wrappers de serveurs distants » et « Tables distantes » sont bien cochées.

Sources :

Ajouter un champs UUID comme clé primaire avec PostGreSQL

L’objectif est d’ajouter un champs UUID (Universally Unique IDentifier = Identifiant Universel Unique) comme clé primaire dans une table.

Il est tout d’abord nécessaire d’activer l’extension pgcrypto :

CREATE EXTENSION pgcrypto;

On peut dorénavant utiliser la fonction gen_random_uuid() pour créer un UUID :

SELECT gen_random_uuid(); 

Et l’intégrer comme type de champs pour un identifiant dans une table :

CREATE SCHEMA IF NOT EXISTS annuaire;
CREATE TABLE annuaire.contacts(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT,
email TEXT
);

Sources