首页 > 解决方案 > 将csv文件导入MySQL表的单列

问题描述

我用谷歌搜索了很多,我没有找到任何符合我的问题的东西。

我有很多时间序列,包含不同的传感器读数。每个时间序列都存储在一个 .csv 文件中,因此每个文件都包含一列。

我必须填充这个 MySQL 表:

CREATE TABLE scheme.sensor_readings (
    id int unsigned not null auto_increment,
    sensor_id int unsigned not null,
    date_created datetime,
    reading_value double,
    PRIMARY KEY(id),
    FOREIGN KEY (sensor_id) REFERENCES scheme.sensors (id) ON DELETE CASCADE
) ENGINE = InnoDB;

sensors表格是:

CREATE TABLE scheme.sensors ( 
    id int unsigned not null auto_increment,
    sensor_title varchar(255) not null,
    description varchar(255) not null,
    date_created datetime,
    PRIMARY KEY(id)
) ENGINE = InnoDB;

reading_value现在,我应该使用上述 .csv 文件中包含的值填充该字段。这种文件的一个例子:

START INFO  
Recording Time  *timestamp*
Oil Pressure    dt: 1,000000 sec
STOP INFO   
0,445328    
0,429459    
0,4245  
0,445099    
0,432434    
0,433426    
...
EOF

我需要设计一个 SQL 查询,在其中填充此表,同时从 .csv 文件中读取值。我不知道如何继续:我应该使用某种临时表作为缓冲区吗?

我使用 HeidiSQL 作为客户端。

标签: mysqlsqlcsvtime-seriesheidisql

解决方案


您正在寻找的工具称为ETL(提取、转换、加载)。

您可以从 csv 文件(以及其他)中提取数据,通过添加传感器数据库表(以及其他)中的信息来转换它们,然后将其加载到 sensor_reading 数据库表中。

市场上有很多ETL。虽然,我应该是不可知论者,一个免费的、易于学习的并涵盖了您未来的所有需求,但您可以开始评估 PDI(Pentaho Data Integrator,绰号 Kettle)。去那里,下载最新的数据集成器,解压缩并按下spoon.bat/spoon.sh。一个很好的开始就在那里。而 StackOverFlow 标志Pentaho Data Integration,通常会很快响应。

或者,您可以尝试Talend其他很多


推荐阅读