Skip to main content
02 Jul

Ekstrakcija podataka iz grib2 u mysql

---------------- ČLANAK JE U IZRADI -----------------

1. DIO: PRIPREMA SOFTVERA

Alat wgrib2 omogućuje ekstrakciju iz grib2 formata izravno u mysql bazu.

Iako na netu postoje već kompajlirane verzije wgrib2 alata, u pravilu u njih nije ugrađena podrška za mysql. Ako pokušate pokrenuti takav binary wgrib2 s -mysql opcijom, dobit ćete ne baš indikativnu poruku greške:

$ wgrib2 gribname.grib2 -mysql localhost username password databasename tablename .....
mysql package not installed

 

U ovom slučaju nije riječ o tome da na računalu nije instaliran mysql paket, već da u wgrib2 nije ukompajlirana podrška za mysql. To možemo riješiti jedino kompajliranjem iz izvornog koda.

Ono što nam treba ako već nemamo instalirano (na Centos platformi) je manje više... gcc, gcc-gfortran, make, zlib-devel, mysql-devel:

# yum install -y gcc, gcc-gfortran, make, zlib-devel, mysql-devel

Nakon toga možemo preuzeti wgrib2 izvorni kod i kompajlirati.

wget http://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz
tar -xzvf wgrib2.tgz
cd grib2
export CC=gcc
export FC=gfortran

 

Moramo reći sustavu da želimo podršku za mysql, editirat ćemo makefile:

$ nano makefile

Pronaći ćemo liniju:

USE_MYSQL=0

Zamijeniti sa:

USE_MYSQL=1

Kompajliramo:

$ make

Ako je proces završio i nema nikakve greške, možemo testirati kompajlirani wgrib2:

cd wgrib2
./wgrib2 -config

 

Trebali bi vidjeti liniju

mysql package is installed

Posao obavljen.

 

 


2. DIO: PRIMJER EKSTRAKCIJE PODATAKA IZ GRIB2 DATOTEKE U MYSQL BAZU:

Napomena: ovdje pretpostavljamo da na ciljanom računalu postoji operativan mysql server. Ako to nije slučaj, potrebno ga je instalirati i pokrenuti te zatim kreirati mysql korisnika - tko ne zna kako uraditi nešto od navedenog, pravac google... U primjeru ćemo smatrati da je mysql server na istom računalu na kojem nam se nalazi grib2 datoteka i wgrib2 alat (localhost).

$ mysql -u username -p

Unutar mysql prompta kreiramo bazu i potrebne tabele...

1) Kreiramo bazu "meteo":
> create database meteo;
2) Selektiramo bazu "meteo":
> use database meteo;
3) Kreiramo wgrib2 tabelu mapiranja wgrib2 parametara:
> create table wgrib2_parameter_mapping (center_id int(5), wgrib_param_name varchar(30), wgrib_param_levelname varchar(100), our_name varchar(30), our_levelname varchar(100), conversion varchar(30), val_precision int(3));
4) Dodajemo primarni ključ tabeli:
> alter table wgrib2_parameter_mapping add primary key (center_id, wgrib_param_name, wgrib_param_levelname);
5) Dodajemo.... what?
> insert into wgrib2_parameter_mapping (center_id,wgrib_param_name,wgrib_param_levelname,our_name,our_levelname,conversion,val_precision) values (7,'TCDC', 'entire atmosphere (considered as a single layer)', 'TCDC', '0', 'PERC_PART', 2);
7) Kreiramo tabelu "data":
> create table data (rt DATETIME NOT NULL,vt DATETIME NOT NULL,lat double NOT NULL,lon double NOT NULL, HGT_850 double(7,1),TMP_850 double(6,2),UGRD_850 double(6,2),VGRD_850 double(6,2), HGT_925 double(7,1),TMP_925 double(6,2),UGRD_925 double(6,2),VGRD_925 double(6,2), HGT_0 double(7,1),TMP_2 double(6,2),RH_2 double(6,2), RH_925 double(6,2), RH_850 double(6,2),TMAX_2 double(6,2),TMIN_2 double(6,2), UGRD_0 double(6,2),VGRD_0 double(6,2),APCP_0 double(6,2),ACPCP_0 double(6,2), CSNOW_0 double(5,2),LFTX_0 double(4,1),CAPE_0 double(6,1), TCDC_925 double(5,2),TCDC_700 double(5,2),TCDC_500 double(5,2), TCDC_0 double(5,2),DSWRF_0 double(8,1),USWRF_0 double(11,1),PRMSL_0 double(6,1));
8) Dodajemo primarni ključ tabeli:
> alter table data add primary key (rt,vt,lat,lon);

Sad je baza spremna za prihvat podataka:

$ ./wgrib2 gribpath/gribname.grib2 -mysql localhost myuser mypassword meteo data -match "(APCP:surface)|(TCDC:(middle|high|low|entire))|(RH:(2 |850|925))|(UGRD:(10 m above|925|850))|(VGRD:(10 m above|925|850))|(PRMSL:mean )|(HGT:(925|850|surface))|(CSNOW:surface)|(TMP:(2 |925|850))|(TMAX:2 )|(TMIN:2 )|((DSWRF|USWRF|:LFTX|CAPE|ACPCP):surface)"

Tags