【发布时间】:2018-07-02 18:30:54
【问题描述】:
我正在尝试为获取 NOAA 天气数据并将其导入我们自己的数据库表的数据库构建一个自动功能。
目前我们有 3 个步骤:
1. Import the data literally into its own table to preserve the original data
2. Copy it's data into a table that better represents our own data in structure
3. Then convert that table into our own data
我遇到的问题源于 NOAA 提供给我们的数据。它采用以下格式:
Station Station_Name Elevation Latitude Longitude Date MXPN Measurement_Flag Quality_Flag Source_Flag Time_Of_Observation ...
从 MXPN(锅中水的最高温度)开始,例如由它的列和其后的其他 4 列组成,它为每种天气观测形式重复相同的 5 列。但问题是,如果在报告的任何站点中都没有观测到特定类型的天气,那么这组 5 列将被完全省略。
例如,如果您查看佛罗里达州中部的车站,您会发现没有 SNOW(降雪量以毫米为单位)。但是,如果您查看新泽西州的车站,您会在他们报告降雪时发现此列。这意味着在不同的报告之间不可能实现列的 1:1 映射,并且列的顺序可能无法保证。
更糟糕的是,一些天气类型的定义中包含通配符,例如SN*# 其中 * 是 0-8 之间的一个数字,代表地面类型,# 是一个数字 1-7,代表最低土壤温度的土壤温度深度,我们想将这些收集在一起.
所有这些都是列标题,我的直觉是构建一个小型 Java 程序,将它们正确映射到我们想要的数据集。但是,我的上级认为可以让数据库在批量导入时执行此操作,但他不知道如何执行此操作。
有没有办法以批量导入的方式执行此操作,或者我最好只编写 Java 程序来将数据转换为我们的格式?
使用的系统: MariaDB 用于数据库。 用于操作系统的 Centos7(如果它真的成为问题) Java 正在使用 JPA 和 Spring Boot 完成,必要时使用休眠。
【问题讨论】:
-
报告是否也会因一年中的时间而有所不同 - 新泽西州的报告是否跳过了 8 月的雪柱?
-
是的,简而言之,如果在特定窗口(一组电台和日期范围)内的某个部分中没有报告任何内容,则不会出现列。
-
您是否正在寻找将任何天气数据文件导入单个临时表的方法,其中列是所有数据文件的超集?
-
是的,我在写这个问题时试图想到的那些花哨的词。有一个例外,但不一定是一个,特别是格式为 SN*#、SX*#、WT## 和 WV## 的字段可能会出现多次,我们希望压缩它们,但这不需要发生在临时表中。
-
我应该澄清另一个想法,有很多重复的列。对于每种天气类型,Measurement_Flag、Quality_Flag 等列都是重复的。因此,任何解决方案都需要在映射它们时考虑到这一点,以便在表单中的天气类型之后立即映射它们。