我正在尝试为数据库构建一个自动功能,该功能可以获取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(降雪量,单位为mm)。但是,如果您查看新泽西州的气象站,就会发现此列,因为它们报告了降雪量。这意味着在不同的报表之间不可能实现列的1:1映射,并且不能保证列的顺序。
更糟糕的是,某些天气类型的定义中包含通配符,例如SN *#,其中*是0-8代表地面类型的数字,#是1-7代表代表土壤最低温度的土壤温度的深度,我们希望将它们汇总在一起
所有这些都是列标题,而我的直觉是构建一个小型Java程序,以根据需要将它们正确地映射到我们的数据集。但是,我的上级认为,可以通过数据库批量导入来执行此操作,但是他不知道该怎么做。
是否可以通过批量导入来实现,还是对我来说最好编写Java程序以将数据转换为我们的格式?
正在使用的系统: MariaDB用于数据库。 适用于操作系统的Centos7(如果确实有问题) Java是通过JPA和Spring Boot完成的,必要时使用休眠功能。
答案 0 :(得分:0)
您正在为每个文件创建一个新表。
我假设前6个字段始终存在,并且接下来的5个字段中出现0次或多次。如果您使用的是SQL Server,则可以按以下方式进行操作
查询information_schema目录以获取其中的字段计数 桌子。如果count = 6,则没有观测值,如果11 列,那么您有1个观测值,如果有17个则有2个观测值 观察结果等
现在您知道可以编写一些SQL的观察次数了 这将循环观察值并将它们插入到 子表的链接返回到具有第一个6的父表 字段。
很抱歉,如果我的假设不对。
-HTH