Cas Fantastic : Mise en place de la zone d'extraction

L'objectif est d'abord de créer la BDE. Les noms des tables et vues seront préfixés :

  • f_ dans le schéma bde (f pour projet Fantastique) ;

  • ou f_bde_ si vous ne disposez que d'un seul schéma pour toutes vos BD.

Question

Créez une vue f_bde_catalogue pour la table de la base Oracle "catalogue".

Indice

Enregistrez l'instruction de création de votre vue dans un fichier f_bde_catalogue.sql.

Indice

  • Créez un fichier f_bde.sql qui va appeler toutes vos instructions de création d'objets dans la BDE.

    Sa première ligne est donc : @f_bde_catalogue.sql

  • On pourra éventuellement créer un fichier f.sql qui appellera les scripts f_bde.sql, f_bdt.sql et f_dw.sql

Gestion de fichiers SQL

Indice

Utiliser l'instruction CREATE OR REPLACE VIEW pour la création de la vue, pour permettre la recréation de la vue par le script f_bde.sql.

Question

Créez une table externe pour chacun des fichiers marketing.ods et departementsInsee2003.txt.

Indice

  • Faites un export CSV du fichier marketing.ods vers le fichier marketing.csv

  • Copiez le, ainsi que departementsInsee2003.txt, dans un dossier data de votre compte sur le serveur sme-oracle.sme.utc

  • Ouvrez l'accès à ce dossier en lecture (chmod 755)

  • Créez un dossier tmp ouvert en lecture et écriture (chmod 777) ainsi que les fichiers de logs et de rejet sur lesquels vous souhaiterez écrire (chmod 666)

  • Créez les objets DIRECTORY permettant de pointer sur les répertoires data et tmp.

  • Créez une table externe pour departementsInsee2003.txt, en envoyant les fichiers de rejet departementsInsee2003.txt.bad et de log departementsInsee2003.txt.log dans votre dossier tmp.

  • Testez votre table externe : SELECT * FROM ...

  • Vérifiez que tout s'est bien passé en examinant les fichiers de rejet et de log

  • De la même façon, créez une table externe pour marketing.csv et vérifier l'accès aux données

Indice

Pensez que les objets DIRECTORY sont partagés au niveau de toute l'instance et ne sont pas spécifiques à un schéma.

Donc si deux users créent un même DIRECTORY nommé tmp, il y aura un conflit (la seconde création écrasera la première).

Indice

Pour accéder à un répertoire d1 situé dans un répertoire d0, d0 doit être accessible en exécution (chmod 711).

Indice

Pour lire les fichiers .log et .bad :

1
more ~/tmp/import.log
2
3
more ~/tmp/import.bad

Indice

Vous pouvez vider les fichiers .log régulièrement pour en faciliter la lecture.

1
echo > ~/tmp/import.log

Indice

Vous pouvez supprimer les fichiers .bad après avoir traité les causes d'un rejet (si une exécution ne génère pas de rejet elle ne crée pas de fichier de rejet, et ne modifie donc pas un éventuel fichier existant).

1
rm ~/tmp/import.bad

Question

Créez une table externe pour le fichier Fantastic

Indice

  • Créez un nouvel objet DIRECTORY permettant de pointer sur le répertoire où il se trouve

Indice

Attention ce fichier est très volumineux, aussi ne faites pas de SELECT * dessus, sous peine d'attendre longtemps la fin de l'exécution (le serveur devant renvoyer plusieurs Mo de données).

Faites des SELECT partiels avec la clause ROWNUM pour limiter les données à rapatrier et des select avec opérations de regroupement (min ou max typiquement).

1
SELECT ... FROM ... WHERE rownum<=N;

Indice

Notez qu'en cas d'erreur à l'import portant sur toutes les lignes, le fichier de log risque de devenir très volumineux, pouvant conduire à la saturation de votre compte. Videz le fichier de log après avoir généré une telle erreur.

Pour vérifier la taille du log :

ls -l ~/tmp/import.log

Indice

Pour tester toutes les lignes : SELECT count(*), min(...), max(...), max(...) ...