Exchange导入Hive数据,同一src_id和dst_id多条数据,最终只有一条

  • nebula 版本:2.6.1
  • 部署方式:分布式
  • 是否为线上版本:N
  • 问题的具体描述

从Hive导入数据时,同一src_id和dst_id,有多条数据,但是落到图里,最终只有一条数据。
同一起始点和终止点,不支持多条边吗?

以下是导入数据的conf文件。导入是成功的,但是以’616851973’为起点,以’612266474’为终点的数据,导入前有多条,但是导入后查询nebula却只有一条。

我理解这多条数据写入时,每条都会update上一条数据,所以才会有这个结果。可是,不希望是update模式,而是,希望每次只要边上的属性amount和update_time不同,都会新添加边。

有什么办法解决这个问题吗?

{
  # Spark相关配置
  spark: {
    app: {
      name: Nebula Exchange 2.6.0
    }
    driver: {
      cores: 24 #驱动程序使用的CPU核数,仅适用于集群模式。
      #maxResultSize: 250G
    }
    cores {
      #max: 1
    }
  }

  # 如果Spark和Hive部署在不同集群,才需要配置连接Hive的参数,否则请忽略这些配置。
  #hive: {
  #  waredir: "hdfs://NAMENODE_IP:9000/apps/svr/hive-xxx/warehouse/"
  #  connectionURL: "jdbc:mysql://your_ip:3306/hive_spark?characterEncoding=UTF-8"
  #  connectionDriverName: "com.mysql.jdbc.Driver"
  #  connectionUserName: "user"
  #  connectionPassword: "password"
  #}

  # Nebula Graph相关配置
  nebula: {
    address:{
      # 以下为Nebula Graph的Graph服务和所有Meta服务所在机器的IP地址及端口。
      # 如果有多个地址,格式为 "ip1:port","ip2:port","ip3:port"。
      # 不同地址之间以英文逗号 (,) 隔开。
      graph:["10.18.30.11:9669","10.18.30.12:9669","10.18.30.13:9669"]
      meta:["10.18.30.11:9669","10.18.30.12:9669","10.18.30.13:9669"]
    }
    # 填写的账号必须拥有Nebula Graph相应图空间的写数据权限。
    user: "root"
    pswd: "nebula"
    # 填写Nebula Graph中需要写入数据的图空间名称。
    space: test
    connection {
      timeout: 30000
      retry: 3
    }
    execution {
      retry: 3
    }
    error: {
      max: 32
      output: "viewfs://c9/user_ext/sina_sso/tmp/errors"
    }
    rate: {
      limit: 1024
      timeout: 30000
    }
  }
  # 处理点
  tags: [

    {
      name: user # Nebula Graph中对应的Tag名称。
      type: {
        source: hive # 指定数据源文件格式,设置为hive。
        sink: client # 指定如何将点数据导入Nebula Graph:Client或SST。
      }

      # 设置读取数据库basketball中player表数据的SQL语句
      exec: """
      select '616851973' as user   
        union all
        select '612266474' as user   
        """

      # 在fields里指定player表中的列名称,其对应的value会作为Nebula Graph中指定属性。
      # fields和nebula.fields里的配置必须一一对应。
      # 如果需要指定多个列名称,用英文逗号(,)隔开。
      fields: []
      nebula.fields: []

      # 指定表中某一列数据为Nebula Graph中点VID的来源。
      vertex:{
        field:user   
      }

      # 单批次写入 Nebula Graph 的最大数据条数。
      batch: 256


      # Spark 分区数量
      partition: 15
    }
  ]

  # 处理边数据
  edges: [

    {
      name: hb_group

      type: {
        source: hive
        sink: client
      }
      
      exec: """
          select
              ower_user    as src_id, 
              recv_user    as dst_id, 
              amount, 
              update_time
          from hb_recv_log
          where ower_user = '616851973' and recv_user ='612266474'
          group by ower_user,recv_user,amount,update_time
          """

      fields: [amount,update_time]
      nebula.fields: [amount,update_time]

      source: {
        field: src_id
      }

      target: {
        field: dst_id
      }

      # 单批次写入 Nebula Graph 的最大数据条数。
      batch: 256


      # Spark 分区数量
      partition: 15
    }
  ]
}

支持的,你可以通过 rank 来区分同个起点和终点之间的多条相同类型的边,参考:https://docs.nebula-graph.com.cn/2.6.1/3.ngql-guide/8.clauses-and-options/where/#rank

2 个赞

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