Difference: EtapesIngestionGrandCat (26 vs. 27)

Revision 272018-07-05 - ThomasBoch

 
META TOPICPARENT name="WebHome"

Etapes d'ingestion d'un grand catalogue

Cette page décrit dans le détail les différentes étapes d'ingestion d'un grand catalogue (>20M sources).

Elle est amenée à devenir une checklist permettant de s'assurer qu'aucune étape n'a été oubliée.

Réservation d'un nom

On réserve un nom de catalogue dans la nomenclature VizieR en respectant la catégorie du catalogue (I, II, ...).

On décide également du nom de la ou des tables.

Récupération des données

Directement par wget si possible. Sinon via le point de contact du projet

Conversion en CSV

Généralement via un script ad-hoc

Génération des histogrammes et statistiques pour chaque colonne

A l'aide de stilts (exemple pour catalogue Attitude) :

# conversion en colfits
./stilts -Xmx10000M -Djava.io.tmpdir=tmp tpipe ifmt=csv ofmt=colfits-plus \
in=CSV/attitude_final.csv out=CSV/attitude_final.colfits

# Génération statistiques
./stilts -Xmx10000M tpipe in=CSV/attitude_final.colfits omode=stats > stats.txt


# Génération histogrammes
for COLNAME in sourceId RAJ2000 DEJ2000 e_RAJ2000 e_DEJ2000 alphaEpoch deltaEpoch \
               sourcePosition pmRA pmDE e_pmRA e_pmDE sourceMu magBJ e_magBJ \
               sourcemagBJ magRF e_magRF sourceMagRF magG e_magG \
               sourceMagG magGrvs e_magGrvs sourceMagGrvs classification \
               sourceClassification auxGSC23 auxSDSS auxUCAC auxLQRF \
               auxTYCHO auxHIP auxPPMXL auxOGLE auxTMASS auxEPC
    do
        echo "Processing ${COLNAME}"
        ./stilts plot2plane layer=histogram  in=CSV/attitude_final.colfits x=${COLNAME} \
out=hist/hist_${COLNAME}.png
    done

Analyse et choix des colonnes

On fait tourner un script (type anafile) pour déterminer le format des colonnes: types de données, valeurs min et max, ...

Il faut ensuite:

  • choisir les colonnes à conserver
  • renommer les colonnes
Et éventuellement:
  • changer le format des colonnes (suppression de chiffres significatifs, mise à NULL des valeurs n'ayant aucun sens physique, changement des unités ...)
Conversion CSV --> format CatFile

Génération des bcf/rcf

Test possible via QueryCat

byte to byte

Plusieurs itérations peuvent être nécessaires

Vérification de la cohérence du RCF par rapport aux données originales

Il faut regénérer les stats et histogrammes à partir d'un dump des données issu du RCF.

Les comparer aux stats et histogrammes originaux.

Génération du byte2byte

Project cds.catana sur svn://snob/cds/

Analyse du CSV :

${rcf2csv} -in_buff 2M -out_buff 4M -header -in catfile/cat.rcf | ${analyzer} -head -format CSV -out cat-columns-analysis.json

avec:

JAR_NAME="cdscatfile-classe.jar"
JAR_LIST="${JAR_NAME}:jhealpixSmall.jar:args4j-2.0.10.jar:javassist.jar"
rcf2csv="java -Xmx20480m -cp ${JAR_LIST} cds.catfile.cmd.RowCatFile2Csv"
analyzer="java -Xmx10000m -jar cds.catana.jar"

Ecriture du ReadMe

Ne pas oublier :

  • décrire l'origine des données
  • acknowledgments, contrat de licence

Génération MOC et carte de densité

Sur cdsxmatch[2/3] :

su pineau
cd /md3200/pineau/catalogues
./densityMap.bash <nom-cat>.rcf 8 16 32 64 128 256 512 1024 2048
scp <nom-cat>.rcf.*hpx boch@alasky:

Sur alasky :

# On supposera que la table en question a pour identifiant vizier II/328/allwise

su boch
mkdir /data/footprints/tables/vizier/II_328_allwise
cd /data/footprints/tables/vizier/II_328_allwise

# copier dans ce répertoire les cartes de densité hpx en les renommant densityMap_8.hpx, ..., densityMap_2048.hpx

(FXP) Pour faciliter le renomage (exemple avec UCAC5):
for f in $(ls); do mv $f $(echo $f | sed -r 's/ucac5\.rcf\./densityMap_/'); done

# Créer un fichier info.json contenant les infos suivants :

{"nbrows": 747634026, "tabName": "II/328/allwise"
}

# Génération des MOC :

cd /home/boch/FootprintService/generation-scripts
for nside in 8 16 32 64 128 256 512 1024 2048
do
    python -c "from moc_generator import hpx2moc; hpx2moc('/data/footprints/tables/vizier/II_328_allwise/densityMap_$nside.hpx', '/data/footprints/tables/vizier/II_328_allwise/footprint_$nside.txt')"
done

./updateAll.sh
Added:
>
>
# Génération des vignettes (thumbnails)
/home/boch/FootprintService/generation-scripts/createThumbnails.py
 (FXP) J'ai fait un tout petit script bash qui fait cette étape, exemple avec des cartes de densités dont le nom est au format RCF_NAME.NSIDE.hpx: ./genMOC.fxp.bash II_342_hsc2 hsc2_detailed.rcf

(Thomas, j'ai mis .fxp. dans le nom du script juste pour que tu voisd'où il vient, tu peux le renomer).

# Si le catalogue n'est constitué que d'une table :

cp -r /data/footprints/tables/vizier/II_328_allwise /data/footprints/ivorn/ivo:__CDS.VizieR_II_328
rm /data/footprints/ivorn/ivo:__CDS.VizieR_II_328/info.json

Si il y a plusieurs tables, ne rien faire

La carte de densité/MOC du catalogue est accessible depuis l'URL :

http://alasky.u-strasbg.fr/footprints/cats/vizier/II/328

Copie du .rcf sur axel
Intégration et publication dans VizieR

L'ingestion d'un grand catalogue dans VizieR est similaire à une ingestion de catalogue classique. Ce travail est le même que celui exécuté par les documentalistes.

voir: petite description d'ingestion VizieR: http://cds.u-strasbg.fr/twiki/bin/view/Documentaliste/VizierDocumentaliste/IngestionCatalogue

doc : http://vizier.u-strasbg.fr/doc/viz/

http://cds.u-strasbg.fr/twiki/bin/view/Ressources/ProcVizier


Récupération des fichiers grands catalogues sur la machine axel. (cette partie ne peut être exéutée par des documentalistes)

Au préalable , le(s) fichier(s) grand catalogue(s) sont à copier sur la machine axel (compte cds).

Dans le cas des catalogues au format dit "fx" (avec une extension .rcf): ils sont a copier sous /r3/cats/ATraiter. Ensuite un simple lien suffit a faire connaitre le catalogue au demon "grand catalogue":

(cd /r1/cats; ln -s /r3/cats/ATraiter/nom_fichier.rcf)

Note: Dans un second temp, le fichier copier sera déplacé (manuellement) sous un sous repertoire de /r1/cats ou /r3/cats.

Le démon format "fx" est un programme java (classe: cdscatfile-classe.jar). Deux demons du programme sont exécutés (version en cours(port 1800) + version beta (port 1801)) qui sont controllés par le script /etc/init.d/xmatchcat.

Le programme (.jar) est installée sous le répertoire : /home/cds/httpd/cgi/ext-tsv/

Installations des catalogues sur les mirroirs VizieR: chaque catalogue est installé sur au moins 1 mirroir VizieR (en plus de axel). L'installation se fait en ajoutant un répertoire vide du même nom que celui utilisé dans axel dans le répertoire dédié aux grands catalogues (~cds/bincats). La synchronisation se fait par rsync (script clonebigcat exécuté par la crontab).

Notes particulières concernant les grands catalogues:
Les 4 points suivant sont à considérer lors de l'ingestion d'un grand catalogue. (ces actions peuvent être effectuées après les étapes d'ingestions classiques)
Changed:
<
<
  1. Création du fichier sample.
    Il s'agit de générer un fichier "sample" qui est un extrait d'une table d'un grand catalogue.
    Ce fichier sera celui décrit dans le fichier ReadMe. Il est au format ASCII avec des colonnes alignées suivant des catractères blancs ' '.

    exemple de commande: (le programme catClient.py est un programme généric pour extraire des données stockées au format dit "fx" - voir les autres exemple plus loin)
    catClient.py -source WISE_PRELIM -c 0-90 -c.rd=1 -out.max=1000 --dir=mirror

    NB : ajouter l'option --port 1801 si on teste en beta

    La commande ci-dessus récupère les données WISE autour de 0-90 au format TSV.
    Transformation en fichier ASCII: programe anafile -d -ccg
    ex: catClient.py -source WISE_PRELIM -c 0-90 -c.rd=1 -out.max=1000 --dir=mirror | anafile -d -ccg

    Le résultat de la commande est composé de statistiques, de la génération d'un byte-2-byte ainsi qu'une commande "acut" qui permet de transformer du TSV en ASCII

    ex: catClient.py -source WISE_PRELIM -c 0-90 -c.rd=1 -out.max=100 --dir=mirror | acut -d -f1%-108j -i' ' -f2%-9j -i' ' -f3%-10j -i' ' .......
>
>
  1. Création du fichier sample.
    Il s'agit de générer un fichier "sample" qui est un extrait d'une table d'un grand catalogue.
    Ce fichier sera celui décrit dans le fichier ReadMe. Il est au format ASCII avec des colonnes alignées suivant des catractères blancs ' '.

    exemple de commande: (le programme catClient.py est un programme généric pour extraire des données stockées au format dit "fx" - voir les autres exemple plus loin)
    catClient.py -source WISE_PRELIM -c 0-90 -c.rd=1 -out.max=1000 --dir=mirror

    NB : ajouter l'option --port 1801 si on teste en beta

    La commande ci-dessus récupère les données WISE autour de 0-90 au format TSV.
    Transformation en fichier ASCII: programe anafile -d -ccg
    ex: catClient.py -source WISE_PRELIM -c 0-90 -c.rd=1 -out.max=1000 --dir=mirror | anafile -d -ccg

    Le résultat de la commande est composé de statistiques, de la génération d'un byte-2-byte ainsi qu'une commande "acut" qui permet de transformer du TSV en ASCII

    ex: catClient.py -source WISE_PRELIM -c 0-90 -c.rd=1 -out.max=100 --dir=mirror | acut -d -f1%-108j -i' ' -f2%-9j -i' ' -f3%-10j -i' ' .......
 
  1. Vérifier le numéro bibliographique qui est à ajouter au ReadMe. S'il n'existe pas, on utilise la nomenclature: YYYYyCat.catid...OC (OC=Observational catalogue - voir .Summary \cType)
Changed:
<
<
  1. Linker les données grand catalogues.
    Un grand catalogue est stocké sous un format binaire propriétaire du CDS (format dit "fo" ou "fx") et n'est donc pas une table de SGBD comme c'est le cas pour les catalogues standards.
    La commande \vizDB du fichier '.Summary' établit le lien avec les données. voir syntaxe: http://vizier.u-strasbg.fr/doc/viz/#vizDB

    exemple: catalogue 2mass (format fit "fo")
    \vizDB{ out.sam }{!ext/find2mass -m 499999999 {{-c @{-c} -r @{-c.rm}| -la @{,RAJ2000} -ld @{,DEJ2000}} [-lJ @{,Jmag}] [-lH @{,Hmag}] [-lK @{,Kmag}]|-i @{2MASS}}}
    Le premier paramètre "out.sam" est le "sample" décrit dans le fichier ReadMe.
    Le second paramètre commençant par un '!' est suivit de la commande qui permet de récupérer les données. Dans ce cas, il s'agit du programme "find2mass" (installé sur chaque mirroir VizieR sous ~cds/httpd/cgi/ext).
    Faire findmass -h pour connaitre les options du programme.
    Les options choisies pour 2mass sont le nombre maximum de records retournés (option -m) ainsi qu'un choix d'interrogation (délimité par le '|'):
    -c @{-c} -r @{-c.rm} : recherche par position en utilisant les options ASU -c et -c.rm (soit respvt le centre et le rayon exprimé en minutes)
    (ou) -la @{,RAJ2000} -ld @{,DEJ2000}} [-lJ @{,Jmag}] [-lH @{,Hmag}] [-lK @{,Kmag}] : par position et optionnellement avec des valeurs sur les magnitudes J, H ou K (colonnes Jmag, Hmag, Kmag)
    (ou) -i @{2MASS} : par identificateur 2MASS (cf colonne 2MASS)

    exemple: wise (format dit "fx")
    Les formats dit "fx" utilisent un programme générique "catClient.py" (voir catClient.py -h)
    \vizDB{ wise.sam }{ ext-tsv/catClient.py -source=WISE_ALLSKY --dir=mirror -out.max=999999999 {-c @{-c} -c.rm @{-c.rm} |-c @{WISE} -filter='WISE_ALLSKY.equals("@{WISE}")' -c.rs 5}}

    Explications des options: 2 possibilités sont envisagées:
    -c @{-c} -c.rm @{-c.rm} : recherche par position
    (ou) -c @{WISE} -filter='WISE_ALLSKY.equals("@{WISE}")' -c.rs 5 : recherche par identifiant WISE (colonne WISE) auquel est ajouté un filtre de position centre par le nom WISE et de rayon 5arcsec

    les autres options (obligatoires):
    -source=nom_du_catalogue_format_fx
    ---dir=mirror : le programme choisit le mirroir ou est stocké le catalogue

    exemple: ukidss8 (format dit "fx")
    \vizDB{ las8.sam }{ ext-tsv/catClient.py -source=ukidss_dr8_las --dir=mirror -out.max=999999999 {-c @{-c} -c.rm @{-c.rm} |-c @{RAJ2000}@{DEJ2000} -c.rs 1 -filter "UKIDSS_DR8_LAS.equals(@{ID})"}}

    Note: certains grands catalogues contiennent plusieurs tables au format "fx" ou "fo"; dans ce cas il faudra autant de commandes \vizDB qu'il existe de tables (exemple: ukidss).
    Il est possible aussi d'avoir un grand catalogue qui contient des tables classiques + des tables format "fx" ou "fo" (exemple VI/137)
>
>
  1. Linker les données grand catalogues.
    Un grand catalogue est stocké sous un format binaire propriétaire du CDS (format dit "fo" ou "fx") et n'est donc pas une table de SGBD comme c'est le cas pour les catalogues standards.
    La commande \vizDB du fichier '.Summary' établit le lien avec les données. voir syntaxe: http://vizier.u-strasbg.fr/doc/viz/#vizDB

    exemple: catalogue 2mass (format fit "fo")
    \vizDB{ out.sam }{!ext/find2mass -m 499999999 {{-c @{-c} -r @{-c.rm}| -la @{,RAJ2000} -ld @{,DEJ2000}} [-lJ @{,Jmag}] [-lH @{,Hmag}] [-lK @{,Kmag}]|-i @{2MASS}}}
    Le premier paramètre "out.sam" est le "sample" décrit dans le fichier ReadMe.
    Le second paramètre commençant par un '!' est suivit de la commande qui permet de récupérer les données. Dans ce cas, il s'agit du programme "find2mass" (installé sur chaque mirroir VizieR sous ~cds/httpd/cgi/ext).
    Faire findmass -h pour connaitre les options du programme.
    Les options choisies pour 2mass sont le nombre maximum de records retournés (option -m) ainsi qu'un choix d'interrogation (délimité par le '|'):
    -c @{-c} -r @{-c.rm} : recherche par position en utilisant les options ASU -c et -c.rm (soit respvt le centre et le rayon exprimé en minutes)
    (ou) -la @{,RAJ2000} -ld @{,DEJ2000}} [-lJ @{,Jmag}] [-lH @{,Hmag}] [-lK @{,Kmag}] : par position et optionnellement avec des valeurs sur les magnitudes J, H ou K (colonnes Jmag, Hmag, Kmag)
    (ou) -i @{2MASS} : par identificateur 2MASS (cf colonne 2MASS)

    exemple: wise (format dit "fx")
    Les formats dit "fx" utilisent un programme générique "catClient.py" (voir catClient.py -h)
    \vizDB{ wise.sam }{ ext-tsv/catClient.py -source=WISE_ALLSKY --dir=mirror -out.max=999999999 {-c @{-c} -c.rm @{-c.rm} |-c @{WISE} -filter='WISE_ALLSKY.equals("@{WISE}")' -c.rs 5}}

    Explications des options: 2 possibilités sont envisagées:
    -c @{-c} -c.rm @{-c.rm} : recherche par position
    (ou) -c @{WISE} -filter='WISE_ALLSKY.equals("@{WISE}")' -c.rs 5 : recherche par identifiant WISE (colonne WISE) auquel est ajouté un filtre de position centre par le nom WISE et de rayon 5arcsec

    les autres options (obligatoires):
    -source=nom_du_catalogue_format_fx
    ---dir=mirror : le programme choisit le mirroir ou est stocké le catalogue

    exemple: ukidss8 (format dit "fx")
    \vizDB{ las8.sam }{ ext-tsv/catClient.py -source=ukidss_dr8_las --dir=mirror -out.max=999999999 {-c @{-c} -c.rm @{-c.rm} |-c @{RAJ2000}@{DEJ2000} -c.rs 1 -filter "UKIDSS_DR8_LAS.equals(@{ID})"}}

    Note: certains grands catalogues contiennent plusieurs tables au format "fx" ou "fo"; dans ce cas il faudra autant de commandes \vizDB qu'il existe de tables (exemple: ukidss).
    Il est possible aussi d'avoir un grand catalogue qui contient des tables classiques + des tables format "fx" ou "fo" (exemple VI/137)
 
  1. Assigner une position par défaut.
    L'interface VizieR exige des contraintes pour interroger des grosses volumétries. Celles-ci sont imposées par la commande donné dans le fichier ".Summary" \vizDB.
    Une recherche par position fait partie de la liste des paramètres de la commande. La position par défaut est donné dans le fichier ".Summary" par:
    \vizComment{ * }{}{\ignore{-c=0-90}}
  2. Création de l'index positionnel.
    N'étant pas stocké en base de donnée, le grand catalogue n'est pas indexé automatiquement en qbox. Pour ce faire, on, génère un fichier qbox à l'aide de la commande "qboxes":
    ex: catClient.py -source WISE_PRELIM -whole -col=RAdeg,DEdeg --dir=mirror |qboxes - > qboxes

    Ensuite, ce fichier est décrit dans le fichier ".Summary":
    \vizQbox{ qboxes }
    Note: si le catalogue est un catalogue ALLSKY il est possible d'indexer le catalogue sur tous les qboxes et SANS construire le fichier.
    \vizQbox{ 0 } (exemple 2mass)
  3. Ingestion du catalogue et suppression (temporaire) de l'acces FTP
    • L'ingestion du catalogue dans vizier se fait par la commande : 2v .
      Dans un premier temps, on fera une ingestion en local pour limiter l'acces au catalogue au CDS (répondre "no" à la question "Release the catalogue Now").
    • la commande make_public -rm cache l'acces FTP au public tout en conservant l'acces au catalogue en local via l'application web.
Lorsque le catalogue sera pret, on pourra rendre à nouveau ce catalogue public:
par la commande 2v (répondre "yes" à la question "Release the catalogue Now" (ou attendre 4 semaines)) et make_public . Note : dans le cas de grands catalogues, il est parfois utile de réordonner les colonnes. Généralement dans VizieR, on regroupe les colonnes erreurs avec leur colonnes (par exemple Hmag et e_Hmag).
Pour se faire, on utilise l'instruction \vizOrder du fichier ".Summary" (voir doc http://vizier.u-strasbg.fr/doc/viz/#vizOrder).
ex: \vizOrder{ wise.sam }{ e_* }{ +* }
"Archivage" des données originales

  • Sur la machine axel
  • Dans un format exploitable facilement (CSV plutôt qu'un dump binaire d'une table MySQL) mais au plus proche des données originales
  • mise à jour de la table METarchive :
    catid int
    oristorage varchar(250)
    oriurlagency varchar(250)
    date int


    le script axel@/r1/newcats/maj_metaarchive met a jour la table
    le script axel@/r1/newcats/sql_metaarchive permet de recuperer la table
  • on peut également envisager de préserver les scripts ayant permis l'ingestion du catalogue

Intégration dans le service de xmatch

Cette étape nécessite de choisir les colonnes que l'on souhaite conserver dans le service de cross-match.

La règle suivie jusqu'à présent a été : colonnes par défaut dans VizieR + colonnes de mouvements propres + colonnes d'erreur non présentes

  1. Copier les .rcf et .bcf sur cdsxmatch:/md3200/xmatch/tables/vizier/big/
    (ou autre part, et créer les liens symboliques depuis ce répertoire)
  2. Editer /root/scripts/xmatch/tableNamesSynonyms.json et ajouter l'entrée pour la table traitée
    Cette étape est indispenable pour faire le lien entre le nom de la table et le nom des fichiers bcf/rcf correspondants
  3. (optionnel) Editer /root/scripts/xmatch/prettyTableNames.json pour donner un synonyme plus sympa à lire que le nom de la table
  4. (optionnel) Editer /root/scripts/xmatch/hideList.json et ajouter le nom de la table si on ne souhaite pas qu'elle apparaisse dans la liste déroulante des grands catalogues sur l'interface web du service de xmatch
  5. Exécuter /root/scripts/xmatch/update-table-list.py /md3200/xmatch/tables/tables.json pour mettre à jour la liste des tables disponibles
  6. Exécuter (DEPRECATED) rsync --delete -av /data-cdsxmatch/md3200/xmatch/tables <nop>root@cdsxmatch2:/data-cdsxmatch2/md3200/xmatch/ (DEPRECATED) ,use rsync --delete -av /data-cdsxmatch/md3200/xmatch/tables/tables.json root@cdsxmatch2:/data-cdsxmatch2/md3200/xmatch/tables/tables.json et rsync --delete -av /data-cdsxmatch/md3200/xmatch/tables/vizier root@cdsxmatch2:/data-cdsxmatch2/md3200/xmatch/tables/ pour copier les rcf/bcf vers cdsxmatch2 (ainsi que tables.json)
  7. Attendre 2h et tester (la liste des tables dispos n'est mise à jour que toutes les 2h au niveau de la servlet)

Génération du catalogue progressif

Intégration dans service TAP

...

Métadonnées des colonnes de photométrie

-- ThomasBoch - 2014-01-21

 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback