与 ArangoDB 配合良好的 ETL 工具——它们是什么?
ETL Tools that function well with ArangoDB - What are they?
ETL 工具太多了。免费的不多。在免费的选择中,他们似乎对 ArangoDB 没有任何了解或支持。如果有人处理过将他们的数据迁移到 ArangoDB 并自动化了这个过程,我很想听听你是如何完成的。下面我列出了 ETL 工具的几种选择。这些选择实际上来自 Bas Geerdink 在 2016 年 Spark Europe 的演讲。
* IBM InfoSphere DataStage
* Oracle Warehouse Builder
* Pervasive Data Integrator
* PowerCenter Informatica
* SAS Data Management
* Talend Open Studio
* SAP Data Services
* Microsoft SSIS
* Syncsort DMX
* CloverETL
* Jaspersoft
* Pentaho
* NiFi
我能够利用 Apache NiFi
来实现这个目标。下面是我为将数据从源数据库中获取到 ArangoDB 所做的工作的非常基本的概述。
使用 NiFi,您可以从许多标准数据库中提取数据。已经创建了许多 Java 驱动程序来处理数据库,例如 MySQL、SQLite、Oracle 等....
我能够使用两个处理器从源数据库中提取数据:
QueryDatabaseTable
ExecuteSQL
这些输出是 NiFi 的 Avro 格式,然后我使用 ConvertAvroToJSON
处理器将其转换为 JSON。这会将输出转换为 JSON 列表。
虽然 NiFi 中确实没有任何东西是专门为与 ArangoDB 一起使用而构建的,但 ArangoDB 内置了一项功能,那就是 API。
我能够使用 NiFi 的 InvokeHTTP 处理器和 POST 方法将数据批量插入 ArangoDB 到名为 Cities 的集合中。
我用作 RemoteURL 的值:
http://localhost:8529/_api/import?collection=cities&type=list&details=true
下面是NiFi的截图。我绝对可以用它来启动我的研究。我希望这可以帮助别人。忽略一些额外的处理器,因为我将它们放在那里用于测试目的,并且正在使用 JOLT 看看我是否可以将它用于 'Transform' 我的 JSON。 ETL中的"T"
.
我想在上面添加评论,但无法添加。
根据Code Novice的回答,我也使用NiFi将数据移动到ArangoDB中。就我而言,我将数据从 Windows 台式机上的 SQL 服务器移动到 Linux 台式机上的 ArangoDB,两台机器都在同一网络上。对于 970 万条记录 = 5.4GB 未压缩的 JSON 数据,流程大约需要 12 分钟 - 合理的性能。
我使用 ExecuteSQLRecord 处理器对上面的流程做了一个小改动。此步骤不需要从 AVRO 转换为 JSON。总的来说,您可以使用两个处理器移动数据:ExecuteSQLRecord 和 InvokeHTTP。
对于执行SQL记录,根据我的测试,我建议提交许多小批量(每批约 10,000 个)而不是几个大批量(每批约 500,000 个)以避免 ArangoDB 瓶颈。
对于 InvokeHTTP,如果你 运行 NiFi 在与 ArangoDB 机器不同的机器上,你需要 (1) 确保你的 ArangoDB 机器防火墙端口是打开的,并且 (2) 在.conf 文件从 127.0.0.1 到你实际的 ArangoDB 机器 IP 地址。 .conf 文件可以在 /etc/arangodb3 文件夹中找到。
对于 T(上面一侧的处理器),我通常会让 SQL 执行转换而不是 JOLT,除非需要 JSON 特定的格式更改。
最后,您可以使用以下三个处理器执行上述操作:ExecuteSQLRecord、PutFile 和 ExecuteProcess
对于执行SQL记录,您需要将输出分组属性更改为每个对象一行(即 jsonl)。对于 ExecuteProcess,您要求 NiFi 使用适当的选项调用 arangoimport。我没有完全在 NiFi 中完成这个过程,但一些测试表明完成时间与 ExecuteSQLRecord 和 InvokeHTTP 流程相当。
我同意 NiFi 是将数据移动到 ArangoDB 的绝佳方式。
ETL 工具太多了。免费的不多。在免费的选择中,他们似乎对 ArangoDB 没有任何了解或支持。如果有人处理过将他们的数据迁移到 ArangoDB 并自动化了这个过程,我很想听听你是如何完成的。下面我列出了 ETL 工具的几种选择。这些选择实际上来自 Bas Geerdink 在 2016 年 Spark Europe 的演讲。
* IBM InfoSphere DataStage
* Oracle Warehouse Builder
* Pervasive Data Integrator
* PowerCenter Informatica
* SAS Data Management
* Talend Open Studio
* SAP Data Services
* Microsoft SSIS
* Syncsort DMX
* CloverETL
* Jaspersoft
* Pentaho
* NiFi
我能够利用 Apache NiFi
来实现这个目标。下面是我为将数据从源数据库中获取到 ArangoDB 所做的工作的非常基本的概述。
使用 NiFi,您可以从许多标准数据库中提取数据。已经创建了许多 Java 驱动程序来处理数据库,例如 MySQL、SQLite、Oracle 等....
我能够使用两个处理器从源数据库中提取数据:
QueryDatabaseTable
ExecuteSQL
这些输出是 NiFi 的 Avro 格式,然后我使用 ConvertAvroToJSON
处理器将其转换为 JSON。这会将输出转换为 JSON 列表。
虽然 NiFi 中确实没有任何东西是专门为与 ArangoDB 一起使用而构建的,但 ArangoDB 内置了一项功能,那就是 API。
我能够使用 NiFi 的 InvokeHTTP 处理器和 POST 方法将数据批量插入 ArangoDB 到名为 Cities 的集合中。
我用作 RemoteURL 的值:
http://localhost:8529/_api/import?collection=cities&type=list&details=true
下面是NiFi的截图。我绝对可以用它来启动我的研究。我希望这可以帮助别人。忽略一些额外的处理器,因为我将它们放在那里用于测试目的,并且正在使用 JOLT 看看我是否可以将它用于 'Transform' 我的 JSON。 ETL中的"T"
.
我想在上面添加评论,但无法添加。
根据Code Novice的回答,我也使用NiFi将数据移动到ArangoDB中。就我而言,我将数据从 Windows 台式机上的 SQL 服务器移动到 Linux 台式机上的 ArangoDB,两台机器都在同一网络上。对于 970 万条记录 = 5.4GB 未压缩的 JSON 数据,流程大约需要 12 分钟 - 合理的性能。
我使用 ExecuteSQLRecord 处理器对上面的流程做了一个小改动。此步骤不需要从 AVRO 转换为 JSON。总的来说,您可以使用两个处理器移动数据:ExecuteSQLRecord 和 InvokeHTTP。
对于执行SQL记录,根据我的测试,我建议提交许多小批量(每批约 10,000 个)而不是几个大批量(每批约 500,000 个)以避免 ArangoDB 瓶颈。
对于 InvokeHTTP,如果你 运行 NiFi 在与 ArangoDB 机器不同的机器上,你需要 (1) 确保你的 ArangoDB 机器防火墙端口是打开的,并且 (2) 在.conf 文件从 127.0.0.1 到你实际的 ArangoDB 机器 IP 地址。 .conf 文件可以在 /etc/arangodb3 文件夹中找到。
对于 T(上面一侧的处理器),我通常会让 SQL 执行转换而不是 JOLT,除非需要 JSON 特定的格式更改。
最后,您可以使用以下三个处理器执行上述操作:ExecuteSQLRecord、PutFile 和 ExecuteProcess
对于执行SQL记录,您需要将输出分组属性更改为每个对象一行(即 jsonl)。对于 ExecuteProcess,您要求 NiFi 使用适当的选项调用 arangoimport。我没有完全在 NiFi 中完成这个过程,但一些测试表明完成时间与 ExecuteSQLRecord 和 InvokeHTTP 流程相当。
我同意 NiFi 是将数据移动到 ArangoDB 的绝佳方式。