我必须将数据(以 CSV 或 TSV 的形式)从 Amazon S3 存储桶中的某个路径加载到某些 MemSQL 表中。将来可能需要从 Azure blob 存储加载数据。我知道有两种方法可以做到这一点:
- MemSQL 管道
- MemSQL 加载程序(已删除)
以下是需要考虑的两种方法的优缺点:
MemSQL 管道 - 如果我们手动创建管道,那么它会自动继续工作。但是,让管道始终处于运行状态会浪费系统资源(RAM)。此外,包含要加载到 MemSQL 中的数据的新文件将仅在一天中的特定时间(通过一些 cron 作业)添加到 S3。因此,如果管道不存在,我想以编程方式创建管道(使用 JDBC),启动管道,然后在成功加载所有数据后停止管道(如果在此过程中出现错误,也处理错误)。此过程将作为每日 cron 作业运行。 但是我找不到任何方法来知道是否所有数据都已同步。我也找不到任何好的方法来知道过程中是否发生任何错误。
MemSQL Loader - MemSQL 加载器在完成加载所需数据后发送状态。因此,我可以在 cron 作业中执行上述作业。但是,由于 MemSQL 加载器现在已被弃用,所以我不想使用它。
请建议将数据加载到 MemSQL 表的最佳方法。另外,请让我知道是否有其他方法可以做到这一点(除了管道和加载器)。
提前致谢。
最佳答案
MemSQL 管道非常适合您的工作负载。正如您提到的,S3 和 Azure Pipelines 将在新文件可用时自动为您加载它们。当 Pipeline 不加载数据时,除了极少量的元数据外,它不会使用系统资源。这是专门设计的,因此您无需手动设置计时作业来加载数据。如有必要,您也可以通过 STOP PIPELINE
停止加载新文件。命令。
information_schema 数据库中有一些表,可以让您查看所有管道的状态和所有已命中的错误。具体来说,您可能想要查询 PIPELINES_ERRORS
表以获取错误。
关于java - 以编程方式将数据从 S3 或 Azure 加载到 MemSQL 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194454/