nebula importer导入报错

版本:3.0.0

配置文件:

version: v3
description: rr
# 是否删除临时生成的日志和错误数据文件。
removeTempFiles: false

clientSettings:

  # nGQL 语句执行失败的重试次数。
  retry: 3

  # Nebula Graph 客户端并发数。
  concurrency: 10

  # 每个 Nebula Graph 客户端的缓存队列大小。
  channelBufferSize: 128

  # 指定数据要导入的 Nebula Graph 图空间。
  space: rr

  # 连接信息。
  connection:
    user: root
    password: nebula
    address: 192.168.50.67:9669

  postStart:
    # 配置连接 Nebula Graph 服务器之后,在插入数据之前执行的一些操作。
    commands: |
      DROP SPACE IF EXISTS rr;
      CREATE SPACE IF NOT EXISTS rr(partition_num=5, replica_factor=1, vid_type=FIXED_STRING(64));
      USE rr;
      DROP TAG IF EXISTS RR_INPUT_BEGIN;
      CREATE TAG RR_INPUT_BEGIN(RES_TYPE_ID int, RES_TYPE string,RES_NAME string);
      DROP EDGE IF EXISTS RR_OPT_SECT;
      CREATE EDGE RR_OPT_SECT(OPT_SECT_ID string, OPT_SECT_NAME string,BEGIN_TYPE_ID int,END_TYPE_ID int);

    # 执行上述命令后到执行插入数据命令之间的间隔。
    afterPeriod: 15s

  preStop:
    # 配置断开 Nebula Graph 服务器连接之前执行的一些操作。
    commands: |

# 错误等日志信息输出的文件路径。
logPath: ./err/test.log

# CSV 文件相关设置。
files:

  # 数据文件的存放路径,如果使用相对路径,则会将路径和当前配置文件的目录拼接。本示例第一个数据文件为点的数据。
  - path: ./RR_INPUT_BEGIN.csv

    # 插入失败的数据文件存放路径,以便后面补写数据。
    failDataPath: ./err/RR_INPUT_BEGIN_ERR.csv

    # 单批次插入数据的语句数量。
    batchSize: 10

    # 读取数据的行数限制。
    limit: 1278

    # 是否按顺序在文件中插入数据行。如果为 false,可以避免数据倾斜导致的导入速率降低。
    inOrder: true

    # 文件类型,当前仅支持 csv。
    type: csv

    csv:
      # 是否有表头。
      withHeader: true

      # 是否有 LABEL。
      withLabel: false

      # 指定 csv 文件的分隔符。只支持一个字符的字符串分隔符。
      delimiter: ","

    schema:
      # Schema 的类型,可选值为 vertex 和 edge。
      type: vertex

    # 本示例第二个数据文件为边的数据。
  - path: ./RR_OPT_SECT.csv
    failDataPath: ./err/RR_OPT_SECT_ERR.csv
    batchSize: 10
    limit: 117000
    inOrder: true
    type: csv
    csv:
      withHeader: true
      withLabel: false
    schema:
      # Schema 的类型为 edge。
      type: edge
      edge:
        # Edge type 名称。
        name: RR_OPT_SECT

        # 是否包含 rank。
        withRanking: false

csv头信息 :

RR_INPUT_BEGIN.RES_TYPE_ID:int,RR_INPUT_BEGIN.RES_TYPE:string,:VID(string),RR_INPUT_BEGIN.RES_NAME:string

报错信息:

INSERT VERTEX `RR_INPUT_BEGIN`(`RES_TYPE_ID`),`RR_INPUT_BEGIN`(`RES_TYPE`,`60000000160593": (704,"xxx","xxx")   ErrMsg: SemanticEINPUT_BEGIN', ErrCode: -1009

不明白为什么nsql生成会有两个TAG名称


:thinking: 你是不是混淆 RR_INPUT_BEGIN.RES_TYPE_ID 和 VID 了,首列要放 VID 数据啊。

问题 之前我的其他导入是没问题的 VID也是没有放到首列

:thinking: 你之前导入过数据是嘛,也是一样的 tag 和 space 吗?

对的

可能是数据没清空完。你数据是部分导入成功了还是全部失败了?

可以参考 SHOW STATS 看下目前的数据库里的数据情况,参考文档 SHOW STATS 的使用 SHOW STATS - Nebula Graph Database 手册

我是清过了 然后再重新导入的 nsql像 下面这种情况
INSERT VERTEX RR_INPUT_BEGIN(RES_TYPE_ID),RR_INPUT_BEGIN(RES_TYPE,RES_NAME) VALUES “123”: (2530,“OBD”,“FH-OBD-282A33”);
没问题吗?


:thinking: 你语法不是没用对吗,tag:(prop1, prop2, prop3) 这样的格式啊,还说是 RR_INPUT_BEGIN 和 RR_INPUT_BEGIN 是 2 个 tag

问题找到了 用源码的方式debug了一下
我这边的csv文件字符集用的UTF-8 bom格式
第一行开头 会带有 239 187 191 三个特殊字节
所以导致 会出现两个tag的情况所以 生成的nsql是错误的

感谢您的及时回复

2 个赞

优秀,学习了。

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