H2 数据库 - CSVREAD - 跳过将 csv 文件的标题行加载到数据库中

Posted

技术标签:

【中文标题】H2 数据库 - CSVREAD - 跳过将 csv 文件的标题行加载到数据库中【英文标题】:H2 database - CSVREAD - skip loading header line of the csv file into db 【发布时间】:2012-01-06 17:15:42 【问题描述】:

我在我的 java 应用程序中使用 H2 DB。我想将 .csv 文件加载到数据库。此文件包含列标题作为文件的第一行。因此,当通过CSVREAD 命令将文件加载到数据库中时,H2 也在尝试解析第一行,因此失败了。

那么如何跳过加载第一行。在我用来将文件加载到数据库的查询下方:

"CREATE TABLE TEST (CIRCLE VARCHAR_IGNORECASE(50), MSISDN VARCHAR_IGNORECASE(50), PORT_IN_DATE TIMESTAMP, OPERATOR VARCHAR_IGNORECASE(255), PRODUCT_TYPE VARCHAR_IGNORECASE(255), PORT_ID VARCHAR_IGNORECASE(255)) AS SELECT * FROM CSVREAD('src/test/resources/test.csv', "

【问题讨论】:

您问题中的陈述被截断;你能补充缺失的部分吗?如果可能,还请添加换行符,以便于阅读。 【参考方案1】:

CSVREAD 函数支持带和不带列标题的文件。如果文件包含列标题,则不要在函数中提供列列表,例如:

SELECT * FROM CSVREAD('test.csv');
SELECT * FROM CSVREAD('data/test.tsv', null, 'rowSeparator=' || CHAR(9));

如果文件不包含列标题,则在函数调用中提供列列表,例如:

SELECT * FROM CSVREAD('test2.csv', 'ID|NAME', 'charset=UTF-8 fieldSeparator=|');

【讨论】:

对于tsv 文件fieldSeparator 应该是char(9) 而不是rowSeparator,因此SELECT * FROM CSVREAD('data/test.tsv', null, 'fieldSeparator=' || CHAR(9)); 对于tsv 是正确的。 该字段分隔符中的| 是什么意思?

以上是关于H2 数据库 - CSVREAD - 跳过将 csv 文件的标题行加载到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

H2:如何通过更改 h2 源代码来更改 csvread 功能

如何使用 libtorrent 下载完全跳过将文件写入磁盘?

如何跳过测试代码或将 oracle 语法转换为 h2

MATLAB coder 支持的 csvread 函数

MATLAB 到 C++:MATLAB Coder 不支持 csvread()

csvread如何使用