【问题标题】:OrientDB ETL does not import CSVOrientDB ETL 不导入 CSV
【发布时间】:2018-09-12 11:13:06
【问题描述】:

我是 OrientDB 的新用户,我正在评估它以供我的团队使用。我无法导入我的 CSV 文件。 CSV是一个非常简单的文件,如下:

fld1,fld2,fld3
a,b,c
d,e,f
g,h,i

JSON 配置文件包含以下内容:

{
  "config": {
    "log": "debug"
  },
  "begin": [],
  "source": { "file": { "path": "../databases/metjsd.csv" } },
  "extractor": { "csv": {} },
  "transformers": [
    {
      "vertex": { "class": "metjsd" },
      "log" : {}
    }
  ],
  "loader": {
    "orientdb": {
       "dbURL": "plocal:../databases/demodb",
       "dbAutoCreateProperties": true,
       "dbUser": "Admin",
       "dbPassword": "Admin",
       "classes": [
         {"name": "metjsd", "extends": "V"}
       ]
     }
  },
  "end": []
  }

我在命令窗口中运行的脚本是:

oetl metjsd.json

这是 Windows 上的 Community Edition 3.0.7。上面的命令就是oetl.bat文件。

我尝试过的一些事情:

  • 删除 JSON 配置文件中我认为不必要的所有单个元素,使其看起来像这样:

    { “源”:{“文件”:{“路径”:“../databases/metjsd.csv”}}, “提取器”:{“csv”:{}}, “变压器”:[ { “顶点”:{“类”:“metjsd”}, } ], “装载机”:{ “东方数据库”:{ "dbURL": "plocal:../databases/demodb", “类”:[ {“名称”:“metjsd”,“扩展”:“V”} ] } }

  • 当我将 dbURL 更改为另一个名称时,会创建一个新数据库,因此我知道正在读取 JSON 脚本。

  • 当我将源文件路径更改为不存在的文件时,返回错误,表示文件丢失,同时表示正在读取 JSON 文件。

  • 我是否创建目标顶点类并没有什么区别 - 没有数据被导入。

  • 向 JSON 配置文件添加调试不会显示调试信息。

每次的结果都是相同的 - 一行显示 ETL 版本号,但没有其他内容。没有调试信息。没有日志输出。就是这样:

C:\Users\John\Downloads\orientdb-3.0.7\orientdb-3.0.7\bin>oetl metjsd.json
OrientDB etl v.3.0.7 - Veloce (build eba5b2a2d63bf1b013db11db277226fcc4b9a34c, branch 3.0.x) https://www.orientdb.com

我已经在两台 Windows 机器上进行了尝试,结果相同。

作为一个非常新手的用户,我所看到的一切都表明 OrientDB 服务和数据库都正常。 OrientDB Studio 中的基本操作按预期工作。

任何人都可以从 JSON 配置文件中看到错误或缺失的内容吗?我还能检查什么?

附加于 2018 年 9 月 13 日

以下是我根据以下请求使用的修改后的 CSV 文件和配置文件:

"fld1","fld2","fld3"
"a","b","c"
"d","e","f"
"g","h","i"


{
"config":{
  "log":"debug"
  },
  "begin": [],
  "source": { "file": { "path": "C:\Users\john.demar\Downloads\orientdb-3.0.7\orientdb-3.0.7\databases\metjsd.csv" } },
  "extractor": { "csv": {} },
  "loader": {
    "orientdb": {
        "dbURL": "remote:localhost/john",
        "serverUser":"root",
        "serverPassword":"orientdb",
        "dbType":"document",
        "dbAutoCreateProperties":true,
        "classes": [
          {"name": "metjsd"}
         ]
     }
  },
  "end": []
}

【问题讨论】:

  • 我的建议是使用绝对路径。此外,当服务器运行时,您不能使用 plocal 数据库(嵌入式)。停止服务器或将配置从 plocal: 更改为 remote:localhost/
  • 谢谢。我进行了这些更改,现在出现此错误:Suppressed: com.orientechnologies.orient.core.exception.OSecurityAccessException: Wrong user/password to [connect] to the remote OrientDB Server instance。无论我将 dbUser/dbPassword 设置为 admin/admin、从配置文件中排除这些用户,还是使用我设置的非默认管理员用户,这都是正确的。
  • 跟进 - 我尝试过的所有用户都可以在 OrientDB Studio 中毫无问题地进行身份验证,并且可以使用 Postman 进行成功的 API 调用。
  • 我在您的配置文件中看到 Admin 的第一个大写字母,使用“admin”,全部小写。
  • 谢谢。自发布此消息以来,我已经尝试了所有小写用户名+密码的用户。此后,我添加了 dbServerUser 和 dbServerPassword 并走得更远 - 添加了顶点,但 CSV 文件列名中没有隐含的属性。此外,控制台中没有更多反馈。所以,数据仍然没有导入。除了那个问题,我想知道为什么我必须作为服务器用户+密码。没有任何在线示例表明这种需要。

标签: csv import etl orientdb


【解决方案1】:

问题是加载程序部分中缺少“类”参数。不需要 Transformer,这适合我的场景,因为我不知道可能出现的属性。

文档并未指出“类”属性是必需的。我发现的所有示例都使用了“类”属性,并且单独使用它似乎是合适的,因为创建了类,没有属性也没有文件导入。添加“类”属性创建了具有所有属性的类。

这个配置文件终于成功了:

{
"config":{
  "log":"debug"
  },
  "begin": [],
  "source": { "file": { "path": "C:\jsd\orientdb-3.0.7\databases\metjsd.csv" } },
  "extractor": { "csv": {}},
  "loader": {
    "orientdb": {
        "dbURL": "remote:localhost/john",
        "serverUser":"root",
        "serverPassword":"orientdb",
        "dbType":"document",
        "dbAutoCreateProperties":true,
        "class": "metjsd"
     }
  },
  "end": []
}

【讨论】:

    【解决方案2】:

    此配置对我有用。 将每一行加载为metjsd 类的顶点。 您没有在配置中提供转换器。

    {
    "config":{
      "log":"debug"
      },
      "begin": [],
      "source": { "file": { "path": "C:\Users\john.demar\Downloads\orientdb-3.0.7\orientdb-3.0.7\databases\metjsd.csv" } },
      "extractor": { "csv": {} },
      "transformers": [
       {
         "vertex": { "class": "metjsd" },
         "log" : {}
       }
     ],
      "loader": {
        "orientdb": {
            "dbURL": "remote:localhost/john",
            "dbUser": "admin",
           "dbPassword": "admin",
            "serverUser":"root",
            "serverPassword":"orientdb",
            "dbType":"graph",
            "dbAutoCreateProperties":true,
            "classes": [
              {"name": "metjsd"}
             ]
         }
      },
      "end": []
    }
    

    这是 OrientDB Studio 上的输出

    【讨论】:

    • 无论有没有变压器都试过了。文档没有表明一个是必要的,或者甚至需要一个变压器的占位符条目。出于我的测试目的,不需要转换数据。你是说你所做的只是添加一个转换器条目并且它起作用了吗?
    • 之所以没有添加transformer是因为会出现我们不知道传入数据的结构的情况,所以我们想“原样”导入,不做任何修改,因此没有转换。就此而言,我们也不希望在 Extractor 部分中包含任何特定内容,除了指出源是 CSV 文件。
    • 转换器只是为传入的数据分配一个类。如您所见,我添加了转换器和数据库的用户名和密码,而不是服务器凭据。 JSON 正是我在本地使用的。请注意,有一条记录 (28:0),因为我的 csv 中有一个空行:我的错
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    相关资源
    最近更新 更多