如何使用VoltDB的csvloader向无主键表导入CSV数据
无主键CSV导入VoltDB的解决方案
你当前导入失败存在两个独立问题,按以下顺序排查修正即可完成导入:
1. 先解决CSV列数不匹配问题
日志明确提示第二行仅读取到1列,表结构期望2列,这是你本次导入0行的直接原因,先排查:
- 核对
SalesChannels表的字段总数,确认字段顺序和类型 - 检查
data/SalesChannels.csv文件:确认分隔符配置正确,第二行及之后的业务行没有缺列、分隔符漏写、特殊字符未转义的问题,保证每一行的字段数和表字段数完全匹配。你加了-skip 1参数跳过表头是正确的,不需要修改该参数。
2. 修正--update参数使用错误
根据官方文档说明,--update参数强制要求目标表必须定义主键,用于匹配已有数据做更新操作,无主键表使用该参数会直接触发导入逻辑错误,无主键的全量新增导入场景完全不需要加这个参数。
无主键表基础导入命令(无任何更新需求)
直接移除--update参数即可,命令如下:
csvloader SalesChannels -f data/SalesChannels.csv -skip 1 -r ./logs
扩展方案:需要后续操作数据的场景
如果你后续需要对导入的数据做更新、删除等操作,建议给表增加自增主键列,不需要你在CSV中提供主键值,导入时工具会自动生成:
第一步:创建带自增主键的表
CREATE TABLE SalesChannels ( id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, -- 按需求添加其他业务字段,注意字段顺序和CSV的列顺序匹配 PRIMARY KEY(id) );
第二步:导入时指定忽略主键列
用--suppress参数指定自增主键的列名,csvloader会自动填充主键值:
csvloader SalesChannels -f data/SalesChannels.csv -skip 1 -r ./logs --suppress id
如果你后续需要导入增量数据更新已有记录,这个时候有主键就可以加上--update参数使用了。
内容的提问来源于stack exchange,提问作者CriXson
相关产品推荐
相关产品推荐

