Starting with version 0.15.1 the odb header tool can produce description of given file's metadata using CREATE TABLE syntax compatible with ODB API SQL, for example:
$ odb header conv.odb -ddl -table conv
will produce:
CREATE TYPE report_status@hdr_at_conv_t AS (active bit1, passive bit1, rejected bit1, blacklisted bit1, use_emiskf_only bit1); CREATE TYPE report_event1@hdr_at_conv_t AS (no_data bit1, all_rejected bit1, bad_practice bit1, rdb_rejected bit1, redundant bit1, stalt_missing bit1, qc_failed bit1, overcast_ir bit1, thinned bit1, latlon_corrected bit1, stalt_corrected bit1); CREATE TYPE report_rdbflag@hdr_at_conv_t AS (lat_humon bit1, lat_qcsub bit1, lat_override bit1, lat_flag bit2, lat_hqc_flag bit1, lon_humon bit1, lon_qcsub bit1, lon_override bit1, lon_flag bit2, lon_hqc_flag bit1, date_humon bit1, date_qcsub bit1, date_override bit1, date_flag bit2, date_hqc_flag bit1, time_humon bit1, time_qcsub bit1, time_override bit1, time_flag bit2, time_hqc_flag bit1, stalt_humon bit1, stalt_qcsub bit1, stalt_override bit1, stalt_flag bit2, stalt_hqc_flag bit1); CREATE TYPE datum_anflag@body_at_conv_t AS (final bit4, fg bit4, depar bit4, varqc bit4, blacklist bit4, ups bit1, uvt bit1, uhu bit1, ut2 bit1, uh2 bit1, uv1 bit1, urr bit1, usn bit1, usst bit1); CREATE TYPE datum_status@body_at_conv_t AS (active bit1, passive bit1, rejected bit1, blacklisted bit1, use_emiskf_only bit1); CREATE TYPE datum_event1@body_at_conv_t AS (vertco_missing bit1, obsvalue_missing bit1, fg_missing bit1, rdb_rejected bit1, assim_cld_flag bit1, bad_practice bit1, vertpos_outrange bit1, fg2big bit1, depar2big bit1, obs_error2big bit1, datum_redundant bit1, level_redundant bit1, not_analysis_varno bit1, duplicate bit1, levels2many bit1, level_selection bit1, vertco_consistency bit1, vertco_type_changed bit1, combined_flagging bit1, report_rejected bit1, varqc_performed bit1, obserror_increased bit1, contam_cld_flag bit1, contam_rain_flag bit1, contam_aerosol_flag bit1, bad_emissivity bit1, model_cld_flag bit1); CREATE TYPE datum_rdbflag@body_at_conv_t AS (press_humon bit1, press_qcsub bit1, press_override bit1, press_flag bit2, press_hqc_flag bit1, press_judged_prev_an bit2, press_used_prev_an bit1, _press_unused_6 bit6, varno_humon bit1, varno_qcsub bit1, varno_override bit1, varno_flag bit2, varno_hqc_flag bit1, varno_judged_prev_an bit2, varno_used_prev_an bit1); CREATE TABLE conv AS ( type INTEGER, expver STRING, class INTEGER, stream INTEGER, andate INTEGER, antime INTEGER, reportype INTEGER, mxup_traj@desc INTEGER, numtsl@desc INTEGER, timeslot@timeslot_index INTEGER, seqno@hdr INTEGER, bufrtype@hdr INTEGER, subtype@hdr INTEGER, groupid@hdr INTEGER, obstype@hdr INTEGER, codetype@hdr INTEGER, sensor@hdr INTEGER, statid@hdr STRING, date@hdr INTEGER, time@hdr INTEGER, report_status@hdr report_status@hdr_at_conv_t, report_event1@hdr report_event1@hdr_at_conv_t, report_rdbflag@hdr report_rdbflag@hdr_at_conv_t, lat@hdr REAL, lon@hdr REAL, lsm@modsurf REAL, orography@modsurf REAL, stalt@hdr REAL, sonde_type INTEGER, station_type INTEGER, entryno@body INTEGER, obsvalue@body REAL, varno@body INTEGER, vertco_type@body INTEGER, vertco_reference_1@body REAL, vertco_reference_2@body REAL, ppcode@conv_body INTEGER, datum_anflag@body datum_anflag@body_at_conv_t, datum_status@body datum_status@body_at_conv_t, datum_event1@body datum_event1@body_at_conv_t, datum_rdbflag@body datum_rdbflag@body_at_conv_t, biascorr@body REAL, biascorr_fg@body REAL, an_depar@body REAL, fg_depar@body REAL, qc_pge@body REAL, fc_sens_obs@body REAL, an_sens_obs@body REAL, obs_error@errstat REAL, final_obs_error@errstat REAL, fg_error@errstat REAL, eda_spread@errstat REAL, hires@update_2 REAL, ) ON 'conv.odb';
The file used in this example was retrieved from ECMWF archive (MARS):
$ echo retrieve,type=mfb,obsgroup=conv,target=conv.odb | mars