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 下载完全跳过将文件写入磁盘?