nebula 如何实现程序控制大批量数据动态导入

提问参考模版:

  • nebula 版本:2.5.0
  • 部署方式单机
  • 是否为线上版本:Y

了解到nebula有exchange/import/connector等导入数据的方式,测试了一下,感觉importer导入速度和效率明显好于connector,但是需要手动填写配置文件,可以通过程序控制的方式实现importer的数据导入吗

程序控制啥意思? 在你的代码里调用importer做导入吗? 还是说想通过./nebula-importer -arg1 -arg2 -arg3来传递参数?

connector 的资源配置是多少,如果你的源数据在单机机器上,connector 在读数据方面起不到优势,建议你把数据放到hdfs上。 并且将connector程序的partition数、cores资源配大一点。

/data1/apps/nebula/nebula-graph-studio/nebula-importer/nebula-importer --config person_edge.yaml

# 连接的Nebula Graph版本,连接2.x时设置为v2。
version: v3

description: example

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

clientSettings:

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

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

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

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

  # 连接信息。
  connection:
    user: root
    password: 123
    address: 10.172.7.192:8069

  postStart:
    # 配置连接Nebula Graph服务器之后,在插入数据之前执行的一些操作。
    commands: |
      CREATE SPACE IF NOT EXISTS gan_test(partition_num=5, replica_factor=1, vid_type=FIXED_STRING(30));
      USE gan_test;
      CREATE TAG IF NOT EXISTS person(name string, age int);
      CREATE EDGE IF NOT EXISTS like(likeness double);

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

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

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

# CSV文件相关设置。
files:

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

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

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

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

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

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

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

      # 是否有LABEL。
      withLabel: false

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

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

      vertex:

        # 点ID设置。
        vid:
           # 点ID对应CSV文件中列的序号。CSV文件中列的序号从0开始。
           index: 0

           # 点ID的数据类型,可选值为int和string,分别对应Nebula Graph中的INT64和FIXED_STRING。
           type: string

        # Tag设置。   
        tags:
            # Tag名称。
          - name: person

            # Tag内的属性设置。
            props:
                # 属性名称。
              - name: name

                # 属性数据类型。
                type: string

                # 属性对应CSV文件中列的序号。
                index: 0

              - name: age
                type: int
                index: 1


嗯嗯 多谢回复,是想通过程序自动生成.yaml配置文件,而不是手动去配置

好的,多谢,还是希望能通过import导入csv文件的形式导入数据,只是希望配置的yaml文件能够动态生成不需要手动去配置

另外我想请教您一下,importer的csv文件以及yaml文件需要和图数据库在同一台服务器上吗

不需要的

我想问的是importer可以和csv/yaml文件不在一台服务器上吗 :sob:,没表达清楚…很抱歉

importer 需要和csv、yaml在一台服务器上, importer 不需要和nebula在同一台服务器上