动态导入h2中的csv

dauxcl2d  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(155)

我正在寻找一个解决方案,以导入任何csv文件与Java(或在运行时用Java应用程序计算的SQL)。一种可能性是首先编写一个动态文件,然后在创建后在h2数据库连接上运行“脚本”。我的主要问题是我动态创建csv文件,列号和标签值可能不同。获得连接的环境,在H2上运行脚本并在应用程序运行期间创建文件仍然存在。
现在我找到了许多解决方案,如果我知道csv结构,但我不知道它之前。另一个问题是,类型是永远不确定(如果它是更容易找到一个解决方案,让说所有的双.
我需要这个的原因是,我想在图表中显示数据集(linechart)。有时我需要前两行作为x轴。有时我必须显示一行有时更多(所以在csv中有一个ylabel或更多)
我想在数据库中保存这些数据的原因是我曾经想根据x轴标准显示这组数据的最小值、最大值和平均值。(smt.按月、日、周显示)。因此,我的想法是通过创建数据并阅读图表组的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

我们可以确保所有的行都有相同的长度。标签在第一行。我希望你得到的想法。如果你有一个更好的解决方案来解决它,我也会听!(对不起的风格不知道如何使一个表)
谢谢你的命令!

aij0ehis

aij0ehis1#

可以肯定的是使用以下SQL命令:

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

这样,所有列都将创建为大小匹配的varchar。
但是在那之后,如果你想处理这些数据,你必须知道你需要哪一列(位置或列名),以及你想把数据解析成哪一种类型。
当然,尝试所有的可能性并抓住每一个例外是可能的。如果没有任何东西成立,你可以扔掉这个措施并继续下去,但这不是最好的做法。

e5nszbig

e5nszbig2#

默认情况下,所有列的数据类型都设置为varchar,如果这样做,您可以自己选择,然后进行此查询。

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

相关问题