Work In Progress

Export première forme normale

Principe

Le module freedom-1NF fournit un service 1) d'administration.

Le paramétrage du module permet de spécifier une base de travail postgreSQL (adresse, user, etc ou service) accessible en lecture / écriture. Par défaut, elle est positionnée sur le serveur Dynacase-platform.

L'interface d'administration du service spécifie une production par :

  • le fichier XML décrivant comment est produit le 1NF : familles et attributs utilisés;
  • la période de production : au mois ⇒ jour / heure, à la semaine ⇒ jour / heure, au jour ⇒ heure;
  • production du résultat soit
    • par export : l'utilisateur nomme le fichier et peut utiliser le strftime, à sa charge de supprimer le fichier produit
    • par script : l'utilisateur précise le script activé en fin de traitement avec en paramètre le fichier local produit, à la charge du script de supprimer le fichier produit
    • ou aucune (cf production à la demande)
  • la répertoire d'export : accessible localement
  • l'interface indique le statut du dernier export et éventuellement la raison si échec
  • l'interface offre un bouton pour lancer la production en direct et le download du fichier est activé

Il est possible de spécifier plusieurs productions.

Préambule

L'intégration de Dynacase-platform avec des outils de reporting (BI) passe par l'exportation de la base Dynacase-platform dans un modèle relationnel dit de 'première forme normale ou 1NF' ou en étoile.
Ce document spécifie le mécanisme d'export et le format d'export de la base Dynacase-platform exportée.

Famille Enclos exemple :

Attribut Type Parent
Identification frame
Surface int Identification
Capacité int Identification
Espèces compatibles array Identification
Espèce docid(“ESPECE”) Espèces compatibles
Qualite enum Identification
Responsable docid(“USER”) Identification
Contenu frame
Animaux array Contenu
Animal docid(“ANIMAL”) Animaux
Gardien docid(“USER”) Animaux

Manuel

Paramètres

Le script WSH fdl_export1nf contient des paramètres permettant de piloter son comportement :

Paramètre Optionnel Défaut Description
–config N fichier XML de configuration des familles à exporter
–outputtype Y sql type du format d'export : sql ou pgservice
–outputname Y <STDOUT> nom du fichier de sortie ou du pgservice
–tmppgservice Y tmp_1nf nom du pg service temporaire qui sert pour le travail d'export
–tmpschemaname Y 1nf nom du schema postgres temporaire de travail
–tmpemptydb Y yes vide ou pas la base temporaire avant de travailler
–sqllog Y loggue les requêtes sql de travail dans le fichier indiqué

Bien sûr le script doit être exécuté dans le contexte de dynacase-control.

Usage

Pré-requis

Premièrement, le fichier de config XML : il doit être correctement formatté, cela va de soi.

Deuxièmement, le PG Service temporaire de travail doit être créé avec sa base associée :

$  sudo vi /etc/postgresql-common/pg_service.conf

Ajouter le service suivant (personnalisez vos dbname, password et nom de service si besoin)

[tmp_1nf]
host=localhost
port=5432
user=freedomowner
password=password
dbname=tmp_1nf

Connectez vous à postgres :

$  sudo -u postgres psql

Créez la base :

=#  CREATE DATABASE tmp_1nf OWNER freedomowner;

Redémarrez Postgresql :

$  sudo /etc/init.d/postgresql-8.4 restart

L'exécution du WSH doit se faire dans le contexte de dynacase-control :

$  sudo /var/www/dynacase-control/wiff context "MON_CONTEXTE" exec /bin/bash --login

Enfin, le lancement du script :

$  ./wsh.php --api=fdl_export1nf

Export en fichier SQL

Lancement de la commande :

$  ./wsh.php --api=fdl_export1nf --config=MY_CONFIG.xml --outputname=OUTPUT_FILE.sql

Exemple de fichier d'export simple:

<?xml version="1.0"?>
<database>
  <table family="ZOO_ANIMAL" >
    <column attribute="an_nom" />
    <column attribute="an_enfant" />
    <column attribute="an_mere" />
    <column attribute="an_pere" />
    <column attribute="an_espece" />
    <column attribute="an_classe" />
    <column attribute="an_sexe" />
  </table>
  <table family="ZOO_ESPECE" >
    <column attribute="es_identification" />
    <column attribute="es_caracteristique" />
  </table>
</database>

L'export va créer le schéma suivant :

Vous remarquerez que les “frames” sont étendues automatiquement en leur attributs correspondants. L'array an_enfant_t est détecté à travers l'attribut an_enfant et la table correspondante est créée.

Export en PG Service

Exports successifs

Cette notion est réalisée à l'aide du paramètre d'export tmpemptydb.

La technique consiste à faire un premier export “normal” avec tmpemptydb=yes (valeur par défaut) et un nom de schéma pour l'export qui correspond à un fichier de config donné, par exemple '1nf_export1'.

Vous procédez dans la foulée avec un deuxième fichier de config et un deuxième schéma par exemple '1nf_export2' mais cette fois en précisant tmpemptydb=no.

En procédant ainsi vous faites plusieurs exports successifs de la même base Dynacase-platform avec des lots de familles différents à exporter en optimisant votre temps d'export car vous ne refaites pas le dump complet à chaque export.

Erreurs

1NF

<database>
  <table family="ENCLOS">
     <column attribute="EN_SURFACE"/>
     <column attribute="EN_T_ANIMAUX"/>
     <column attribute="EN_GARDIEN"/>
   </table>
  <table family="ANIMAL">
     <column attribute="AN_ESPECE" name="species"/>
     <column attribute="AN_CLASSE"/>
     <column attribute="AN_CLASSE:CLA_LATIN"/>
   </table>
</database>

Un attribut de type “docid” implique la création d'une table contenant l'id et le “title”. Si cet attribut précise la famille docid(“ANIMAL”) alors il sera relié à la table “animal”. Cette table animal peut être précisé dans une autre balise table.

Pour les attributs de type tableau une table spécifique est créée pour cet attribut. Les clefs étrangères seront indiquées dans la base générée.

Pour les attributs “énuméré” simple, une table spécifique est créée.

Pour les attributs “multivalué”, une table spécifique est créée avec une colonne (clef étrangère) pointant vers le document.

Si l'attribut est un cadre ou un tab l'ensemble de attributs le composant seront ajoutés. Le cadre ou le tab n'a pas d'existence dans la schéma résultat. Les noms des colonnes sont les id des attributs, elles peuvent être renommées si l'attribut name est précisé.

Mode opératoire

Le résultat de l'exportation de données se fait dans un base de donnée PostgreSQL. A partir de cette base il sera possible d'exporter les données pour les importer dans une autre base de données telle que mysql. Le but de cette exportation est de retourner un ensemble de données relatives à une famille de document. Cette famille sera la base de la table pivot d'un schéma en étoile qui sera exploitable par un outils de reporting.

L'exportation sera effectué par un programme wsh qui aura en paramètre un fichier de configuration xml qui indiquera la famille pivot ainsi que l'ensemble des propriétés et attributs à importer. Les attributs “single value” sont récupérés tels que et mis dans une colonne dédiée de la table pivot. Les attributs énumérés sont des clefs externes d'une table qui contient l'ensemble des attributs énumérés. Le nom de cette table est le nom de l'attribut énuméré. Cette table à comme colonnes (id:text, label:text, free:text). Si l'énuméré est de type “free” (possibilité d'ajouter une clef arbitraire), les clefs arbitraires seront ajoutée à cette table avec la colonne free à vrai Les attributs relations sont des clefs externes d'une table qui contient l'ensemble des documents liés par cette famille. Le nom de cette table est le nom de l'attribut relation. Cette table à comme colonnes par défaut (id:int,title:text,fromid:int). fromid est une clef externe vers la table families qui contient l'ensemble des familles (id:int, title:text).

Export Schéma en étoile (non prévue)

Export Schéma en flocons (non prévue)

1) au sens freedom-admin
freedom_3/workinprogress/normal_form.txt · Dernière modification: 28/09/2010 10:55 par nicolas.thing