Studio CSV import 非字符串类型空值导致数据插入失败

  • nebula 版本:3.0.0(为节省回复者核对版本信息的时间,首次发帖的版本信息记得以截图形式展示)

  • 部署方式:单机

  • 安装方式:Docker / RPM

  • 是否为线上版本:N

  • 硬件信息

    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
    studio 数据导入,schema中有类型未int可为null的property,然后csv文件中对应列包含有空值,就会导致数据导入失败,提示 ;, ErrMsg: SemanticError: Column count doesn't match value count., ErrCode: -1009

个人估计原因是nebula importer的实现问题,在从csv数据拼接成导入nSQL的时候,没有对非字符串类型空值进行有效处理,导致生成的insert语句类似于下边,age列的值在value中是空的,两个逗号直接相连,没有用null填充

INSERT VERTEX `person`(
        `name`, `gender`,`age`,`idno`
    )
VALUES "P01234": (
        "赵A","男",,""
    )
;

:thinking: age 这列是所有都为空吗

不是,有的有数值,有的为空

另外,studio是3.2.2,不知道这里边用的csv importer是什么版本的

应该是 3.0.0 的 importer,:thinking: 我在喊研发同学过来确认下如果数据为空,是否会默认填充个 null

:thinking: 目前我们是不支持为空的字段项自动填充 NULL 的,因为原始数据处理这块的话,属于数据清洗范畴,需要导入的人自己根据业务来处理导入数据。

这个理由有点牵强吧。。。让所有用户自己在csv里填充null而不是在importer里自动完成空值null的填充?产生的工作量不是一个级别的呀。

而且这也不是数据清理的问题,这个报错也不是因为脏数据也不是因为数据格式错误,可为null的列插入null值是导入工具的正常功能需求吧。

我不太熟悉Go语言,看了下importer的源码,不知道是不是这里只对string类型的值做了判断和format,加一下其他类型的空值判断逻辑是不是就行。
image
主要对Go不熟悉,不然也想直接改源码就不在这提问了。

我理解的数据清理的结果是要把这个数据源的数据同导入数据的字段进行匹配,确定每个字段都有对应的字段。以及我和研发讨论过,如果要做与判断自动填充的话,涉及到导入数据中的数据判断,会损耗导入速度,现在数据直接导入不涉及额外的操作。

当然你可以根据你的业务需求,给我们的 importer 工具提一个 feature 类的 issue,issue 传送门:https://github.com/vesoft-inc/nebula-importer/issues

嗯,看了眼,还有open issue很久了还没人回复

你得到了正确的提交方式,我去催催负责人~ 感谢

不是,是我感谢你们继续完善功能。

:thinking: 我问了负责人,他说这块可以做的,具体时间还没定,看下开发资源之后安排人开发这个功能哈。

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。