动态导入h2中的csv

Import csv in h2 dynamically

我正在寻找一种解决方案,以便在 h2 中使用 Java(或 SQL 使用 Java 应用程序在 运行 计算的 SQL 导入任何 csv 文件数据库。一种可能性是先写一个动态文件,然后在创建后在 h2 数据库连接上 运行 "script"。 我的主要问题是我动态创建 csv 文件并且列号和标签值可能不同。获取连接的环境,运行 h2 上的脚本和在应用程序期间创建的文件 运行ning 仍然存在。

如果我知道 csv 结构但我以前不知道它,现在我找到了很多解决方案。另一个问题是 typ 永远不确定(如果更容易找到一个解决方案,假设所有都是双倍的。

我需要这个的原因是,我想在图表(折线图)中显示数据集。有时我需要前两行作为 x 轴。有时我不得不显示一行有时更多(所以在 csv 中有一个 ylabel 或更多)

我想将此数据保存在数据库中的原因是我想根据 x 轴标准显示此集合的最小最大值和平均值。 (sm. 每月、每天、每周显示)。所以我的想法是通过创建数据和读取图表 i 组 DATE(DATE,TIME)、数据来设置日期格式。

例子: 我的基本 csv 示例

DATE,TIME,label1  ,  y2       ,line3  ,...  (labelNames have no equality)

20160101,0115, any int,any double ,any int,...

20160101,0130, ...    , ...       , ...   ,..   (if there is no messure 

20160101,0145, ...    ,  .....    , ---   ,..    the placefolder is '---')

20160101,0200, ....

20160102,...

所以有时我生成的 csv 看起来像:

DATE,TIME,label1,y2

或者像这样:

DATETIME,label1,y2

或者这个:

DATE,y2,another4

我们可以确定所有的线都具有相同的长度。标签在第一行。我希望你明白了。如果你有更好的解决方案来解决它,我也会听听那个!(sry for the style have no idea how to make a table)

感谢任何命令!

肯定有效的方法是使用此 SQL 命令:

CREATE TABLE TEST AS SELECT * FROM CSVREAD('test.csv'); <<from h2 docu>>

这样,所有列都将创建为具有匹配大小的 varchar。

但在那之后,如果你想使用这些数据,你必须知道你需要哪一列(位置或列名)以及你想将数据解析到哪种类型。

当然可以尝试所有的可能性并捕获每一个异常。如果没有任何问题,您可以放弃此措施并继续,但这不是最佳做法。

默认情况下,所有列的数据类型都设置为 varchar,如果自行选择,则进行此查询。

CREATE TABLE TEST
(
  ID INT PRIMARY KEY,
  Col1 VARCHAR(55),
  Col2 INT(55)
) 
AS 
SELECT * 
FROM CSVREAD('here file path complete\test.csv');