Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当并非所有列都得到保证时,将数据从csv导入数据库_Sql_Database_Import - Fatal编程技术网

Sql 当并非所有列都得到保证时,将数据从csv导入数据库

Sql 当并非所有列都得到保证时,将数据从csv导入数据库,sql,database,import,Sql,Database,Import,我正在尝试为一个数据库构建一个自动功能,该数据库接收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

我正在尝试为一个数据库构建一个自动功能,该数据库接收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列将被完全忽略

例如,如果您查看佛罗里达州中部的站点,您将发现没有雪(降雪量以mm为单位)。然而,如果你看看新泽西州的电视台,你会发现这篇专栏报道了降雪。这意味着不同报告之间不可能实现列的1:1映射,并且可能无法保证列的顺序

更糟糕的是,一些天气类型在其定义中包含通配符,例如SN*#其中*是一个0-8之间的数字,表示地面类型,#是一个数字1-7,表示最低土壤温度所采用的土壤温度的深度,我们希望将其收集在一起

所有这些都是列标题,我的直觉是构建一个小型Java程序,以便根据需要将它们正确地映射到我们的数据集。然而,我的上司认为,让数据库在大规模导入时执行此操作是可能的,但他不知道如何执行此操作

有没有一种方法可以实现大规模导入,或者我最好只编写Java程序将数据转换为我们的格式

正在使用的系统: 这是数据库的一部分。 操作系统的Centos7(如果它真的成为问题)
Java是用JPA和Spring引导完成的,必要时使用hibernate。

您正在为每个文件创建一个新表

我假设前6个字段始终存在,并且接下来5个字段的出现次数为0或更多。如果您使用的是SQL Server,我将按如下方式进行处理:

  • 查询信息\u架构目录以获取中的字段计数 桌子。如果计数=6,则不存在观测值,如果为11 列,则有1个观察值,如果有17个,则有2个 观察结果等

  • 现在您已经知道了观察的数量,可以编写一些SQL了 这将循环观察结果并将其插入到 子表,链接回具有前6个 田地

  • 如果我的假设有偏差,我道歉


    -HTH

    报告是否也因一年中的时间而有所不同-新泽西州报告是否跳过了8月份的雪景栏?是的,简而言之,如果在某个特定时段(一组站点和日期范围)的某个区段中没有报告任何内容它将不存在列。您是否正在寻找一种方法,将任何天气数据文件导入到一个包含所有数据文件超集的列的单一暂存表中?是的,我在写问题时一直在想这些花哨的词。有一个例外,虽然它不一定是一个,特别是SN*#、SX*#、WT##和WV##格式的字段,可能出现多次,我们希望压缩它们,但这不需要出现在暂存表中。我应该澄清的另一个想法是,有很多重复的列。对于每种天气类型,测量标志、质量标志等列都是重复的。因此,任何解决方案都需要在映射它们时考虑到这一点,以便在表单中的天气类型之后立即映射它们。感谢您的回答,虽然我们不使用MS SQL Server,但您的一些回答似乎敲响了一些警钟,表明他希望如何实现这一点。我们目前使用的是MariaDB,这是一种SQL类型的服务器,但根据他的说法,我们的操作方式将有所不同。