FSO 用户指南¶
欢迎¶
欢迎¶
前言¶
FSO(Forecast sensitivity to observation)即预报对观测的敏感性,最初由MMM / NCAR开发,是一种基于伴随理论的用于评估观测对同化系统和数值预报贡献的方法,或者说,观测对预测误差减少的影响。
本手册介绍的是为中国气象局气象探测中心搭建的一套预报误差对观测的敏感性分析系统(FSO),更新至v2.0版本,产品包括全国15公里分辨率逐12小时的预报误差对观测的敏感性分析。系统采用Singularity Docker容器技术对FSO软件进行了封装,以便于系统移植与管理。同时采用Python Airflow流程管理软件对整个业务作业进行可视化管理。该系统能实时监测观测系统、数值预报和同化系统,并为观测系统的调整、观测数据来源的评估提供依据。

服务器要求¶
PHP version 7.0.15 or newer is required, with the intl extension installed.
A database is required for most web application programming. Currently supported databases are:
- MySQL (5.1+) via the MySQLi driver
- PostgreSQL via the Postgre driver
- Python3 external packages: pendulum
Not all of the drivers have been converted/rewritten for FSO. The list below shows the outstanding ones.
- MySQL (5.1+) via the pdo driver
- Oracle via the oci8 and pdo drivers
- PostgreSQL via the pdo driver
- MS SQL via the mssql, sqlsrv (version 2005 and above only) and pdo drivers
- SQLite via the sqlite (version 2), sqlite3 (version 3) and pdo drivers
- CUBRID via the cubrid and pdo drivers
- Interbase/Firebird via the ibase and pdo drivers
- ODBC via the odbc and pdo drivers (you should know that ODBC is actually an abstraction layer)
可信度¶
该FSO最初由 MMM/NCAR 开发。该框架是为实际业务运行而编写的,其中许多原始脚本、代码和子系统都来自于 WRF Data Assimilation System 的代码库中借鉴而来的。多年来,它一直由北京朗润知天科技有限公司和一群热情的科学家和研究人员开发和维护。
FSO简介¶
WRF FSO 简介¶
WRF(Weather Research And Forecast Model) FSO系统包括预报模式(WRF)及其伴随(WRFPLUS)、变分数据同化系统(WRFDA)和诊断、绘图工具(TOOLS)。该系统框架和流程如下:

1.观测场与背景场进入WRFDA得到分析场,从分析场和背景场出发,分别进行相同时效的非线性前向预报。
2.计算两组预报场与真实场的预报误差。根据这两组预报误差的差异定义预报准确度F(通常为干总能量)。
3.计算预报准确度对预报场(分别来自背景场和分析场)的梯度,利用伴随模式WRFPLUS分别进行两次反向积分,得到预报误差对分析变量的敏感度。
4.预报误差对分析变量的敏感性结果作为输入场,进入WRFDA的伴随模式,计算预报误差对观测的敏感性,它涉及观测算子的伴随、观测误差协方差及Hessian矩阵的逆,在最小化过程中采取Lanczos迭代方法获得。
参考网页:
<http://www2.mmm.ucar.edu/wrf/users/wrfda/Tutorials/2012_July/docs/README_FSO_v3.3.pdf>
<http://www2.mmm.ucar.edu/wrf/users/wrfda/Tutorials/2014_July/docs/WRFDA_sensitivity.pdf>
依赖软件¶
安装¶
包括以下几个部分:
- 安装Airflows, 介绍Airflow的安装
- 安装Singularity, 介绍Singularity的安装
- 准备运行目录, 介绍运行环境的准备。
- @startuml
Alice -> Bob: Authentication Request Bob –> Alice: Authentication Response
Alice -> Bob: Another authentication Request Alice <– Bob: another authentication Response
@enduml
Airflow安装¶
Airflow是一种用编程方式编写以安排和监控工作流程的平台。
安装¶
>export AIRFLOW_HOME=/指定路径/airflow #设置环境变量airflow主路径
>pip install airflow #安装
安装完成后
cd $AIRFLOW_HOME
>vim airflow.cfg
主要修改以下参数
airflow_home = /指定路径/airflow #airflow主路径
dags_folder = /指定路径/airflow/dags #dag python文件目录
executor = LocalExecutor #先使用local模式
base_log_folder = /指定路径/airflow/logs #主日志目录
sql_alchemy_conn = postgresql+psycopg2://airflow:fso2018@localhost #指定元数据存储方式,目前采用Postgresql
[webserver]
authenticate = True
filter_by_owner = true
base_url = http://localhost:8080
web_server_host = XXX.XXX.XXX.XXX #web server 机器IP
base_url = http://XXX.XXX.XXX.XXX:8080 #web server 机器IP:PORT
初始化数据库
>airflow initdb
Airflow基本概念¶
DAG (Directed Acyclic Graph)¶
它展示的是任务的集合,并描述了任务之间的依赖关系,以及整个DAG的一些属性,如起止时间、执行周期、重试策略等等。通常一个.py文件就是一个DAG。也可以理解为这就是一个完整的shell脚本,只是它可以保证脚本中的命令有序执行。
task 任务¶
它就是DAG文件中的一个个Operator,描述了具体的操作步骤。
Operator 执行器¶
airflow定义了很多的 Operator,通常一个操作就是一个特定的Operator,比如调用shell命令要用BashOperator,调用python函数要用PythonOperator,发邮件要用EmailOperator,连SSH要用SSHOperator。社区还在不断地贡献新的 Operator。
ds 日期¶
前面的脚本里用到了{{ ds }}变量,每个DAG在执行时都会传入一个具体的时间(datetime对象),这个ds就会在 render 命令时被替换成对应的时间。
Important
这里要特别强调一下,对于周期任务,airflow传入的时间是上一个周期的时间(划重点),比如你的任务是每天执行,那么今天传入的是昨天的日期,如果是周任务,那传入的是上一周今天的值。
Macros¶
脚本里如果需要不同的时间格式或者不同的时间段怎么办,这时候就到Macro出场了,airflow本身提供了几种时间格式,比如ds_nodash,顾名思义就是不带短横-的时间格式,而且还会有一些相关的函数可以直接调用,比如ds_add可以对时间进行加减。
Singularity安装¶
实况分析系统采用Singularity容器技术进行封装,可以有效隔离依赖软件环境的搭建、环境变量的配置等细节。
安装¶
业务工作站推荐Linux操作系统,Ubuntu/centos发行版本,以centos为例:
#安装或更新依赖
sudo yum update && \
sudo yum groupinstall 'Development Tools' && \
sudo yum install libarchive-devel
#下载并安装最新版本
git clone https://github.com/singularityware/singularity.git
cd singularity
./autogen.sh
./configure --prefix=/usr/local --sysconfdir=/etc
make
sudo make install
运行目录¶
FSO目录结构¶
/home/zwtd/FSO
├── china_FSO #FSO主目录
│ ├── be
│ ├── fc
│ ├── fsoplot
│ ├── ob
│ ├── plot
│ ├── rc
│ ├── run
├── china_static
├── china_working
├── scripts
脚本放置¶
cd /home/zwtd/FSO/china_FSO/be
> be.d01.dat
cd /home/zwtd/FSO/china_FSO/fsoplot
> data2pg.py
drawfso.py
drawlev.py
drawmap.py
drawvar.py
drawvarlev.py
sql.py
timepath.py
chn.ncl
fso.ncl
map.ncl
var.ncl
varmap.ncl
cd /home/zwtd/FSO/china_FSO/run
>wrapper_run_fso_v3.4.ksh\
cd /home/zwtd/FSO/china_static
> namelist.input
namelist.wps
namelist.obsproc
geo_em.d01.nc
Vtable.GFS
Vtable.GFS_0p5
QNWFA_QNIFA_Monthly_GFS
obserr.txt
cd /home/zwtd/FSO/scripts
> fso_2pg.py
fso_adj.py
fso_check_ana.py
fso_check_icbc.py
fso_check_obs.py
fso_da.py
fso_err.py
fso_forcing.py
fso_impact.py
fso_nl.py
fso_plot.py
china_common.py
wrf_check_gfs.py
wrf_obsproc.py
wrf_prod.py
wrf_real_ana.py
wrf_real_icbc.py
wrf_wps.py
FSO运行¶
教程¶
该教程包括以下几个部分:
- FSO所需数据, 介绍运行FSO需要准备的数据。
- 加载DAGs, 介绍DAG的加载与修改。
- 启动Airflow, 介绍Airflow启动。
- FSO运行流程, 介绍FSO系统运行流程。
- FSO业务系统监控, 介绍FSO业务系统网页监控。
- 产品的图形输出, 介绍FSO产品的输出和目录。
数据准备¶
FSO系统所需数据有观测数据、初始数据和真实场数据。目前已有的观测数据为中国观测站点资料,初始场和真实场均来自0.25°× 0.25°全球系统预报和分析资料(GFS)。
GFS数据¶
至少需要每日UTC00时和UTC12时的GFS数据,且每个时刻至少存放该时刻分析场(*.f000)及其12、24、36、48、60(f012,f024,..,f060)时效的预报场。
GFS存放路径:/data1/raw/gfs/gfs.yyyymmddhh
cd GFS_PATH
> gfs.2018080112 gfs.2018080200 gfs.2018080212 gfs.2018080300
cd gfs.2018080112
> gfs.t00Z.pgrb2.0p25.f000 gfs.t00Z.pgrb2.0p25.f012 gfs.t00Z.pgrb2.0p25.f024
gfs.t00Z.pgrb2.0p25.f036 gfs.t00Z.pgrb2.0p25.f048 gfs.t00Z.pgrb2.0p25.f060
观测数据¶
目前已有的观测资料包括:

1.观测资料获取¶
观测资料都采用crontab定时获取。
1.1 地面观测资料
> */15 * * * * bash -c "python3.6 get-metar.py --root-dir /home/data/raw/cimiss --time $(date -u +\%Y\%m\%d\%H\%M --date '-30 minute')" 1> /dev/null
资料以xml文件存储,每15分钟一个文件:
> cd SURF_CHN_MAIN_MIN
> 201810282030.xml 201810282045.xml 201810282100.xml
201810282115.xml 201810282130.xml 201810282145.xml
......
1.2 探空资料
> 20 8,20 * * * bash -c "python3.6 get-sounding.py --root-dir /home/data/raw/cimiss --time $(date -u +\%Y\%m\%d\%H\%M --date '-20 minute')" 1> /dev/null
探空资料以xml文件存储,每12小时一个文件:
> cd UPAR_CHN_MUL_FTM
> 201810281200.xml 201810290000.xml 201810291200.xml
201810300000.xml 201810301200.xml 201810310000.xml
......
1.3 风廓线雷达资料
> */15 * * * * bash -c "source python3.6 get-profiler.py --root-dir /home/data/raw/profiler --date $(date -u +\%Y\%m\%d\%H\%M --date '-30 minute')" 1> /dev/null
风廓线资料以txt文件存储,使用的半小时平均风廓线数据,每30分钟一个文件:
> cd profiler/20181028
> Z_RADA_59981_WPRD_MOC_NWQC_HOBS_LC_QI_20181028110000.TXT
Z_RADA_59981_WPRD_MOC_NWQC_HOBS_LC_QI_20181028113000.TXT
......
2.资料转LITTLE_R格式¶
观测数据需存储为WRFDA可识别的little_r格式ob.ascii或prebufr格式ob.bufr。
> 0 12,00 * * * bash -c "python3.6 /home/data/raw/little_r/convert_cimiss_2_littler.py"
观测数据存放路径:/data1/input/little_r/yyyymmddhh
cd OBDATA_PATH
> 2018080112 2018082000 2018080212 2018080300
cd 2018080112
> ob.ascii
DAG加载¶
DAG加载¶
cd $AIRFLOW_HOME/dags
将DAG python脚本(fso-prod-v2.0.py,wrf-prod-v2.0.py)放入该目录下
ls -all
> fso-prod-v2.0.py wrf-prod-v2.0.py
DAG基本构架¶
以wrf-prod-v2.0.py为例,DAG基本框架为:
vim wrf-prod-v2.0.py
>default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2018,8,01), #任务开始执行的日期#
'end_date': datetime(2030, 12, 31), #任务开始终止的日期#
}
> dag = DAG(
'wrf-prod-v2.0', #dag_id
default_args=default_args,
user_defined_macros={ 'npe': 12 }, #运行该DAG所占节点数
schedule_interval='00 06,18 * * *') #任务启动时间:每天北京时间06时,18时
> check_gfs_command ="""
ulimit -s unlimited \
&& cd /home/FSO \ #FSO主目录
&& SINGULARITYENV_CURR_DATE={{ ts_nodash }} \
singularity exec -e -B china_FSO:/FSO3.4 -B china_working:/gjx_working -B china_static:/gjx_static -B /data1/raw/gfs:/gfs fso3.simg ./scripts/wrf_check_gfs.py""" # 将主机路径与容器路径绑定,冒号前是主机目录路径,冒号后面是容器目录路径;运行wrf_check_gfs.py
Airflow启动¶
启动¶
Airflow后台运行程序包括
>airflow webserver #启动调度器
>airflow scheduler #启动后端网页
调度器(Scheduler),负责在指定时间运行作业。
管理页面后端服务器(Webserver),负责向前端(浏览器)提供HTML服务。
Airflow基础命令¶
airflow的所有执行操作都需要在命令行下完成,界面只能看任务的依赖,包括任务执行状态,但如果任务失败了,还是要在命令行下执行。 airflow的命令总的来说很符合直觉,常用的有如下几个:
- test: 用于测试特定的某个task,不需要依赖满足
- run: 用于执行特定的某个task,需要依赖满足
- backfill: 执行某个DAG,会自动解析依赖关系,按依赖顺序执行
- unpause: 将一个DAG启动为例行任务,默认是关的,所以编写完DAG文件后一定要执行这和要命令,相反命令为pause
- scheduler: 这是整个 airflow 的调度程序,一般是在后台启动
- clear: 清除一些任务的状态,这样会让scheduler来执行重跑
从上面的命令顺序也可以看出,通常的执行顺序是这样:编写完DAG文件,直接用backfill命令测试整个DAG是否有问题,如果单个任务出错,查看log解决错误,这时可以用test来单独执行,如果有依赖关系就用run执行,问题解决后就用unpause打开周期执行, scheduler 是在后台默认打开的。之后运行过程中发现需要重跑则用clear命令。
举例¶
>airflow test dag_id task_id execution_date
用于测试该dag_id中的task_id这一任务,并给定测试时间 例如:
>airflow test fso-prod-00Z-v2.0 2-3-adj-backward 2018-08-16T08:00:00
>airflow backfill dag_id -s start_date -e end_date
用于反算和补充某个时刻或某段时间的dag流程,注意的是start_date和end_date之间必须要相差一天,例如:
>airflow backfill fso-prod-00Z-v2.0 -s 2018-08-16 -e 2018-08-17
FSO运行流程¶
FSO由两个DAG共同完成:wrf-prod-v2.0与fso-prod-v2.0。
wrf-prod-v2.0:为fso-prod-v2.0准备初始场、真实场及观测数据,由wrf-prod-v2.0.py脚本控制。
fso-prod-v2.0:执行FSO、结果输出及绘图,由fso-prod-v2.0.py脚本控制。
二者关系¶

wrf-prod-v2.0¶
每天运行2次,分别准备UTC00时和UTC12时的背景场及观测数据。每一步骤对应一个外部python脚本。
- wrf_check-gfs
检测运行时刻GFS资料是否到位(gfs.*.f012,gfs.*.f024,…,gfs.*.f060)
- wrf_obsproc
检测观测资料是否已到位;进行观测资料前处理,得到WRFDA可以读取的观测文件ob.ascii,存放在/china_FSO/ob/路径下。
- wps-prod
运行wps,解码数据,提供地形等。
- real-ana-prod
由该时刻GFS分析场(gfs.*.f000)得到wrfinput_d01.ana,用作计算预报误差的真实场,存放在/china_FSO/rc/路径下。
- real-icbc-prod
将GFS-36小时预报场(gfs.*.f036)用作同化系统的背景场wrfinput_d01,存放于/china_FSO/rc/。
- wrf-prod
以real-icbc-prod得到的wrfinput_d01作为初始场,向前预报24小时,长时间的计算结果可用于统计背景误差协方差等
fso-prod-v2.0¶
- check-obs, check-icbc, check-ana
检查观测ob.ascii、同化背景场wrfinput_d01、真实场wrfinput_d01.ana是否生成。
- 1-data-assimialtion
三维变分同化,得到分析场wrfvar_output,保存为/china_FSO/fc/wrfinput_d01。
- 2-1-nl-forecast
分别从Xa,Xb开始进行非线性积分12小时得到预报场Xfa,Xfb
- 2-2-comp-forcing
计算预报误差以及预报误差对预报变量的梯度
- 2-3-adj-backward
将预报误差对预报变量的梯度作为伴随模式的初值,反向积分得到预报误差对Xa、Xb的梯度。
- 3-fcst-err
根据两次伴随结果,计算预报误差对分析变量的敏感性。
- 4-fso-impact
把预报误差对分析变量的敏感性作为输入,利用WRFDA伴随求得预报误差对观测的敏感性。
- 5-fso-plot
采用数据库方式存储和分类统计观测贡献率,并用于绘图。
FSO系统网页监控¶
采用基于Python语言的Airflow流程管理软件,对实时运行的FSO作业进行管理。针对每个作业编写DAG(定向非循环图)配置脚本,设置各个任务以及任务间的执行依赖关系。通过在运行机器上访问10.36.4.44:8080/admin链接可以查看当前运行的作业列表。其中DAG列显示的是作业名称,如fso-prod-00Z-v2.0,点击可以进入作业详情页面;Schedule列显示的是作业运行时间,如``00 06 * * *``表示每天06时的00分启动作业运行,Recent Tasks列显示作业运行状态,以不同颜色表示不同运行状态,如深绿色表示已经完成的作业数,浅绿色是正在运行的任务数,灰色是等待执行的任务数,红色表示出错的任务数,通过点击相应颜色的按钮可以进入查看任务;Last Run列可以查看最近运行时间;Links列提供一些快捷的操作按钮。

FSO系统作业管理页面
在上一页面中通过点击DAG列中的某一作业名称,可以进入该作业的详细信息查看页面。默认显示Tree View,左侧是展开的子任务,右侧每列小方块是不同时间运行的状态,可以看到最近运行的任务,深绿色表示作业正常结束,浅绿色表示正在运行,红色表示出错,黄色表示遇到问题准备重试,灰色表示在队列中。

作业流程的树状结构图
点击上图中的Graph View视图,可以显示作业中各个任务间的依赖关系图,可以清晰地看出任务流程,其中任务框的颜色同前表明任务的运行状态。通过点击某一任务框,显示进一步的操作选项对话框,如点击View Log按钮可以查看该任务的运行日志。当出现错误时可以查看错误原因,主要的错误是数据未就位。

作业流程依赖关系图

任务监控界面

任务运行日志
FSO结果后处理¶
gts_omb_oma_01¶
FSO系统计算得到的预报误差对观测敏感性结果位于/home/zwtd/FSO/china_FSO/run/ccyymmddhh/obsimpact/gts_omb_oma_01文件中。以下图为例对当前gts_omb_oma_01数据结构作简要说明。
>vim gts_omb_oma_01

metar¶
metar 站点个数 # 2个
第一个站点提供的数据个数 # 1 地面自动站仅探测地面层数据,所以每个时刻都每个站点只有一个数据
数据序号 类型标识 纬度 经度 气压 观测变量u的观测值 u新息增量(O-B) 质控码(qc) u观测误差 u的贡献率 观测变量v的观测值 v新息增量(O-B) 质控码(qc) v观测误差 v的贡献率 观测变量t的观测值 t新息增量(O-B) 质控码(qc) t观测误差 t的贡献率 观测变量p的观测值 p新息增量(O-B) 质控码(qc) p观测误差 p的贡献率 观测变量q的观测值 q新息增量(O-B) 质控码(qc) q观测误差 q的贡献率 \# 一个站点的一个高度层数据为一行
1 1SURF_ 22.47 111.36 -888888.0000000 -1.0840874 0.0000000 -88 1.1000000 0.0000000 0.1864257 0.0000000 -88 1.1000000 0.0000000 299.2500000 0.0000000 -88 2.0000000 0.0000000 -888888.0000000 0.0000000 -88 100.0000000 0.0000000 -888888.0000000 0.0000000 -88 -888888.0000000 0.0000000
第二个站点提供的数据个数 # 1
....
注:synop、ships 、buoy 、surface(包括metar) 、sonde_sfc、tamdar_sfc 数据格式相同
sound¶
sound 站点个数 # 1个
第一个站点提供的数据个数 #5个 探测到5个不同高度层上的数据
站点序号 同一站点数据序号 类型标识 纬度 经度 u的观测值 u的贡献率 质控码(qc) u观测误差 分析增量 v的观测值 v的贡献率 质控码(qc) v观测误差 分析增量 t的观测值 t的贡献率 质控码(qc) t观测误差 分析增量 q的观测值 q的贡献率 质控码(qc) q观测误差 分析增量 # 一个站点的一个高度层数据为一行 探空数据观测变量为u、v、t、q
1 1 UPA 36.73 101.75 77100.0000000 -1.6704050 0.0000000 -88 1.2200000 0.0000000 -1.0998851 0.0000000 -88 1.2200000 0.0000000 287.3500000 0.0000000 -88 1.0000000 0.0000000 0.0071498 0.0000000 -88 0.0018132 0.0000000
注:sound、tamdar、airep数据格式相同
profiler¶
profiler 站点个数 # 1个
第一个站点提供的数据个数 #2个 探测到2个不同高度层上的数据
站点序号 同一站点数据序号 类型标识 纬度 经度 u的观测值 u的贡献率 质控码(qc) u观测误差 分析增量 v的观测值 v的贡献率 质控码(qc) v观测误差 分析增量 \#风廓线探测仅有u、v两种观测变量
1 1 WND 20.00 110.15 1415.0000000 -9.0069802 -708.2427394 0 2.2000000 -6.3706098 10.1899120 -1873.6202283 0 2.2000000 9.7260098
Note:pilot、profiler、geoamv、qscat、polaramv数据格式一致
数据库¶
为了便于FSO运行结果的统计与绘图,采用pythonPostgreSQL数据库的方式对数据进行存储与管理.可参考 /home/zwtd/FSO/fso_2pg.py和/home/zwtd/FSO/china_FSO/fsoplot/data2pg.ncl脚本。
数据库连接¶
前台查看
>psql -U fso -d fso
>\dt #列举所有数据表
>\d tb_sound #列举tb_sound数据表结构
>select * from tb_sound; #查看tb_sound数据表的具体内容,注意“;”不能少
>drop table tb_sound; #删除数据表,注意“;”不能少

从其他电脑登录数据库
psql -U fso -d fso -h 10.36.4.44 -p 5432 -w
后台连接
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database="fso",user="fso",password="fSO@2018",host="10.36.4.44",port="5432")
绘图产品¶
有了数据库对结果的管理,可直接读取数据库数据进行结果的统计,并传递到NCL绘图脚本中进行绘图。可参考/china_FSO/fsoplot/drawfso.py/等脚本。 绘图产品最终存放于/china_FSO/run/ccyymmddhh/fsoplot/目录中。
Note
负值代表该观测减小预报误差;正值代表该观测增加预报误差

探空观测对12小时预报误差的贡献

地面观测对12小时预报误差的贡献

观测类型对12小时预报误差的贡献

变量类型对12小时预报误差的贡献

不同层次观测对12小时预报误差的贡献

探空观测的不同观测变量对12小时预报误差的贡献

地面观测的不同观测变量对12小时预报误差的贡献
故障处理¶
常见故障处理¶
当遇到问题时,首先检查任务的log,通过点击出错任务(tree view下的红色块)。以下是可能出现的问题:
观测数据与模式背景场数据的实时获取¶
地面台站数据取自CIMISS中的SURF_CHN_MAIN_MIN,目前从FTP上获取。如果发现任务出现错误,如下图所示的是地面观测数据未就位,需要检查数据源。
图1:作业出现问题,如上图中的红色块,其余黄色块是由于红色块的失败而无法进行。 如果要重新运行某个任务,可以点击对应的色块,然后选择Clean按钮即可。
图2:通过点击红色块,然后点击弹框中的View Log按钮,查看日志以判断具体错误。
磁盘空间不足问题¶
Airflow业务流程中已经添加了clean-data任务,会定期清理中间历史数据,如GFS背景场、CIMISS地面台站观测、分析中间文件等,留存的文件是转换后的NetCDF数据。目前一个时次是33MB大小,一天24⨉4=96次,共3.2GB左右,工作站磁盘空间为7.3TB,刨除其它文件占用,可以存放约5年的数据。如果考虑后续三维分析,可以存放越1至2个月的产品数据。