qubed/backend/standard_fdb_schema
2024-10-08 12:13:10 +01:00

591 lines
16 KiB
Plaintext

# * Format of the rules is:
# [a1, a2, a3 ...[b1, b2, b3... [c1, c2, c3...]]]
# - The first level (a) defines which attributes are used to name the top level directory
# - The second level (b) defines which attributes are used to name the data files
# - The third level (c) defines which attributes are used as index keys
# * Rules can be grouped
# [a1, a2, a3 ...
# [b1, b2, b3... [c1, c2, c3...]]
# [B1, B2, B3... [C1, C2, C3...]]
# ]
# * A list of values can be given for an attribute
# [ ..., stream=enfo/efov, ... ]
# This will be used when matching rules.
# * Attributes can be typed
# Globally, at the begining of this file:
# refdate: Date;
# or in the context of a rule:
# [type=cl, ... [date:ClimateMonth, ...]]
# Typing attributes is done when the user's requests or the GRIB values need to be modified before directories, files and indexes are created. For example, ClimateMonth will transform 2010-04-01 to 'may' internally.
# * Attributes can be optional
# [ step, levelist?, param ]
# They will be replaced internally by an empty value. It is also posiible to provide a default subtitution value: e.g. [domain?g] will consider the domain to be 'g' if missing.
# * Attributes can be removed:
# [grid-]
# This is useful to remove attributes present in the GRIB that should not be ignored
# * Rules are matched:
# - If the attributes are present in the GRIB/Request, or marked optional or ignored
# - If a list of possible value is provided, one of them must match, for example
# [ class, expver, stream=enfo/efov, date, time, domain ]
# will match either stream=enfo or stream=efov, all other attributes will be matched if they exist in the GRIB or user's request
# * On archive:
# - Attributes are extracted from the GRIB (namespace 'mars'), possibly modified by the attribute type
# - Only the first rule is used, so order is important
# - All GRIB attributes must be used by the rules, otherwise an error is raised
# * On retrieve:
# - Attributes are extracted from the user's request, possibly modified by the attribute type (e.g. for handling of U/V)
# - All the matching rules are considered
# - Only attributes listed in the rules are used to extract values from the user's request
# Default types
param: Param;
step: Step;
date: Date;
hdate: Date;
refdate: Date;
latitude: Double;
longitude: Double;
levelist: Double;
grid: Grid;
expver: Expver;
time: Time;
fcmonth: Integer;
number: Integer;
frequency: Integer;
direction: Integer;
channel: Integer;
instrument: Integer;
ident: Integer;
diagnostic: Integer;
iteration: Integer;
system: Integer;
method: Integer;
# ???????
# reference: Integer;
# fcperiod: Integer;
# opttime: Integer;
# leadtime: Integer;
# quantile: ??????
# range: ??????
# band: Integer;
########################################################
# These rules must be first, otherwise fields of These
# classes will be index with the default rule for oper
[ class=ti/s2, expver, stream, date, time, model
[ origin, type, levtype, hdate?
[ step, number?, levelist?, param ]]
]
[ class=ms, expver, stream, date, time, country=de
[ domain, type, levtype, dbase, rki, rty, ty
[ step, levelist?, param ]]
]
[ class=ms, expver, stream, date, time, country=it
[ domain, type, levtype, model, bcmodel, icmodel:First3
[ step, levelist?, param ]
]
]
[ class=el, expver, stream, date, time, domain
[ origin, type, levtype
[ step, levelist?, param ]]
]
########################################################
# The are the rules matching most of the fields
# oper/dcda
[ class, expver, stream=oper/dcda/scda, date, time, domain?
[ type=im/sim
[ step?, ident, instrument, channel ]]
[ type=ssd
[ step, param, ident, instrument, channel ]]
[ type=4i, levtype
[ step, iteration, levelist, param ]]
[ type=me, levtype
[ step, number, levelist?, param ]]
[ type=ef, levtype
[ step, levelist?, param, channel? ]]
[ type=ofb/mfb
[ obsgroup, reportype ]]
[ type, levtype
[ step, levelist?, param ]]
]
# dcwv/scwv/wave
[ class, expver, stream=dcwv/scwv/wave, date, time, domain
[ type, levtype
[ step, param, frequency?, direction? ]]]
# enfo
[ class, expver, stream=enfo/efov, date, time, domain
[ type, levtype=dp, product?, section?
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type=tu, levtype, reference
[ step, number, levelist?, param ]]
[ type, levtype
[ step, quantile?, number?, levelist?, param ]]
]
# waef/weov
[ class, expver, stream=waef/weov, date, time, domain
[ type, levtype
[ step, number?, param, frequency?, direction? ]]
]
########################################################
# enda
[ class, expver, stream=enda, date, time, domain
[ type=ef/em/es/ses, levtype
[ step, number?, levelist?, param, channel? ]]
[ type=ssd
[ step, number, param, ident, instrument, channel ]]
[ type, levtype
[ step, number?, levelist?, param ]]
]
# ewda
[ class, expver, stream=ewda, date, time, domain
[ type, levtype
[ step, number?, param, frequency?, direction? ]]
]
########################################################
# elda
[ class, expver, stream=elda, date, time, domain?
[ type=ofb/mfb
[ obsgroup, reportype ]]
[ type, levtype, anoffset
[ step, number?, levelist?, iteration?, param, channel? ]]
]
# ewda
[ class, expver, stream=ewla, date, time, domain
[ type, levtype, anoffset
[ step, number?, param, frequency?, direction? ]]
]
########################################################
# elda
[ class, expver, stream=lwda, date, time, domain?
[ type=ssd, anoffset
[ step, param, ident, instrument, channel ]]
[type=me, levtype, anoffset
[ number, step, levelist?, param]]
[ type=4i, levtype, anoffset
[ step, iteration, levelist, param ]]
[ type=ofb/mfb
[ obsgroup, reportype ]]
[ type, levtype, anoffset
[ step, levelist?, param]]
]
# ewda
[ class, expver, stream=lwwv, date, time, domain
[ type, levtype, anoffset
[ step, param, frequency?, direction? ]]
]
########################################################
# amap
[ class, expver, stream=amap, date, time, domain
[ type, levtype, origin
[ step, levelist?, param ]]]
# maed
[ class, expver, stream=maed, date, time, domain
[ type, levtype, origin
[ step, levelist?, param ]]]
# mawv
[ class, expver, stream=mawv, date, time, domain
[ type, levtype, origin
[ step, param, frequency?, direction? ]]]
# cher
[ class, expver, stream=cher, date, time, domain
[ type, levtype
[ step, levelist, param ]]]
# efhc
[ class, expver, stream=efhc, refdate, time, domain
[ type, levtype, date
[ step, number?, levelist?, param ]]]
# efho
[ class, expver, stream=efho, date, time, domain
[ type, levtype, hdate
[ step, number?, levelist?, param ]]]
# efhs
[ class, expver, stream=efhs, date, time, domain
[ type, levtype
[ step, quantile?, number?, levelist?, param ]]]
# wehs
[ class, expver, stream=wehs, date, time, domain
[ type, levtype
[ step, quantile?, number?, levelist?, param ]]]
# kwbc
[ class, expver, stream=kwbc, date, time, domain
[ type, levtype
[ step, number?, levelist?, param ]]]
# ehmm
[ class, expver, stream=ehmm, date, time, domain
[ type, levtype, hdate
[ fcmonth, levelist?, param ]]]
# ammc/cwao/edzw/egrr/lfpw/rjtd/toga
[ class, expver, stream=ammc/cwao/edzw/egrr/lfpw/rjtd/toga/fgge, date, time, domain
[ type, levtype
[ step, levelist?, param ]]]
########################################################################
# enfh
[ class, expver, stream=enfh, date, time, domain
[ type, levtype=dp, hdate, product?, section?
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, hdate
[ step, number?, levelist?, param ]]
]
# enwh
[ class, expver, stream=enwh, date, time, domain
[ type, levtype, hdate
[ step, number?, param, frequency?, direction? ]]
]
########################################################################
# sens
[ class, expver, stream=sens, date, time, domain
[ type, levtype
[ step, diagnostic, iteration, levelist?, param ]]]
########################################################################
# esmm
[ class, expver, stream=esmm, date, time, domain
[ type, levtype
[ fcmonth, levelist?, param ]]]
# ewhc
[ class, expver, stream=ewhc, refdate, time, domain
[ type, levtype, date
[ step, number?, param, frequency?, direction? ]]]
########################################################################
# ewho
[ class, expver, stream=ewho, date, time, domain
[ type, levtype, hdate
[ step, number?, param, frequency?, direction? ]]]
# mfam
[ class, expver, stream=mfam, date, time, domain
[ type=pb/pd, levtype, origin, system?, method
[ fcperiod, quantile, levelist?, param ]]
[ type, levtype, origin, system?, method
[ fcperiod, number?, levelist?, param ]]
]
# mfhm
[ class, expver, stream=mfhm, refdate, time, domain
[ type, levtype, origin, system?, method, date?
[ fcperiod, number?, levelist?, param ]]]
# mfhw
[ class, expver, stream=mfhw, refdate, time, domain
[ type, levtype, origin, system?, method, date
[ step, number?, param ]]]
# mfwm
[ class, expver, stream=mfwm, date, time, domain
[ type, levtype, origin, system?, method
[ fcperiod, number, param ]]]
# mhwm
[ class, expver, stream=mhwm, refdate, time, domain
[ type, levtype, origin, system?, method, date
[ fcperiod, number, param ]]]
# mmsf
[ class, expver, stream=mmsf, date, time, domain
[ type, levtype=dp, origin, product, section, system?, method
[ step, number, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, origin, system?, method
[ step, number, levelist?, param ]]
]
# mnfc
[ class, expver, stream=mnfc, date, time, domain
[ type, levtype=dp, origin, product, section, system?, method
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, origin, system?, method
[ step, number?, levelist?, param ]]
]
# mnfh
[ class, expver, stream=mnfh, refdate, time, domain
[ type, levtype=dp, origin, product, section, system?, method, date
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, origin, system?, method, date?
[ step, number?, levelist?, param ]]
]
# mnfm
[ class, expver, stream=mnfm, date, time, domain
[ type, levtype, origin, system?, method
[ fcperiod, number?, levelist?, param ]]]
# mnfw
[ class, expver, stream=mnfw, date, time, domain
[ type, levtype, origin, system?, method
[ step, number?, param ]]]
# ea/mnth
[ class=ea, expver, stream=mnth, date, domain
[ type, levtype
[ time, step?, levelist?, param ]]]
# mnth
[ class, expver, stream=mnth, domain
[ type=cl, levtype
[ date: ClimateMonthly, time, levelist?, param ]]
[ type, levtype
[ date , time, step?, levelist?, param ]]]
# mofc
[ class, expver, stream=mofc, date, time, domain
[ type, levtype=dp, product, section, system?, method
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, system?, method
[ step, number?, levelist?, param ]]
]
# mofm
[ class, expver, stream=mofm, date, time, domain
[ type, levtype, system?, method
[ fcperiod, number, levelist?, param ]]]
# mmsa/msmm
[ class, expver, stream=mmsa, date, time, domain
[ type, levtype, origin, system?, method
[ fcmonth, number?, levelist?, param ]]]
[ class, expver, stream=msmm, date, time, domain
[ type, levtype, origin, system?, method
[ fcmonth, number?, levelist?, param ]]]
# ocea
[ class, expver, stream=ocea, date, time, domain
[ type, levtype, product, section, system?, method
[ step, number, levelist?, latitude?, longitude?, range?, param ]]
]
#=# seas
[ class, expver, stream=seas, date, time, domain
[ type, levtype=dp, product, section, system?, method
[ step, number, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, system?, method
[ step, number, levelist?, param ]]
]
# sfmm/smma
[ class, expver, stream=sfmm/smma, date, time, domain
[ type, levtype, system?, method
[ fcmonth, number?, levelist?, param ]]]
# supd
[ class=od, expver, stream=supd, date, time, domain
[ type, levtype, origin?, grid
[ step, levelist?, param ]]]
# For era
[ class, expver, stream=supd, date, time, domain
[ type, levtype, grid- # The minus sign is here to consume 'grid', but don't index it
[ step, levelist?, param ]]]
# swmm
[ class, expver, stream=swmm, date, time, domain
[ type, levtype, system?, method
[ fcmonth, number, param ]]]
# wamf
[ class, expver, stream=wamf, date, time, domain
[ type, levtype, system?, method
[ step, number?, param ]]]
# ea/wamo
[ class=ea, expver, stream=wamo, date, domain
[ type, levtype
[ time, step?, param ]]]
# wamo
[ class, expver, stream=wamo, domain
[ type=cl, levtype
[ date: ClimateMonthly, time, param ]]
[ type, levtype
[ date, time, step?, param ]]]
# wamd
[ class, expver, stream=wamd, date, domain
[ type, levtype
[ param ]]]
# wasf
[ class, expver, stream=wasf, date, time, domain
[ type, levtype, system?, method
[ step, number, param ]]]
# wmfm
[ class, expver, stream=wmfm, date, time, domain
[ type, levtype, system?, method
[ fcperiod, number, param ]]]
# moda
[ class, expver, stream=moda, date, domain
[ type, levtype
[ levelist?, param ]]]
# msdc/mdfa/msda
[ class, expver, stream=msdc/mdfa/msda, domain
[ type, levtype
[ date, time?, step?, levelist?, param ]]]
# seap
[ class, expver, stream=seap, date, time, domain
[ type=sv/svar, levtype, origin, method?
[ step, leadtime, opttime, number, levelist?, param ]]
[ type=ef, levtype, origin
[ step, levelist?, param, channel? ]]
[ type, levtype, origin
[ step, levelist?, param ]]
]
[ class, expver, stream=mmaf, date, time, domain
[ type, levtype, origin, system?, method
[ step, number, levelist?, param ]]
]
[ class, expver, stream=mmam, date, time, domain
[ type, levtype, origin, system?, method
[ fcmonth, number, levelist?, param ]]
]
[ class, expver, stream=dacl, domain
[ type=pb, levtype
[ date: ClimateDaily, time, step, quantile, levelist?, param ]]
[ type, levtype
[ date: ClimateDaily, time, step, levelist?, param ]]
]
[ class, expver, stream=dacw, domain
[ type=pb, levtype
[ date: ClimateDaily, time, step, quantile, param ]]
[ type, levtype
[ date: ClimateDaily, time, step, param ]]
]
[ class, expver, stream=edmm/ewmm, date, time, domain
[ type=ssd
[ step, number, param, ident, instrument, channel ]]
[ type, levtype
[ step, number, levelist?, param ]]
]
[ class, expver, stream=edmo/ewmo, date, domain
[ type, levtype
[ number, levelist?, param ]]
]
# stream gfas
[ class=mc/rd, expver, stream=gfas, date, time, domain
[ type=ga, levtype
[ step, param ]]
[ type=gsd
[ param, ident, instrument ]]
]
# class is e2
[ class, expver, stream=espd, date, time, domain
[ type, levtype, origin, grid
[ step, number, levelist?, param ]]]
[ class=cs, expver, stream, date:Default, time, domain
[ type, levtype
[ step, levelist?, param ]]]