java - 从 S3 或 Azure 以编程方式将数据加载到 MemSQL 的最佳方法是什么?
问题描述
我必须将数据(以 CSV 或 TSV 的形式)从 Amazon S3 存储桶中的某个路径加载到一些 MemSQL 表中。将来可能需要从 Azure Blob 存储加载数据。我知道有两种方法可以做到:
- MemSQL 管道
- MemSQL 加载器(已弃用)
以下是需要考虑的两种方法的优缺点:
MemSQL Pipeline - 如果我们手动创建管道,那么它将自动继续工作。但是,保持管道始终处于运行状态会浪费系统资源(RAM)。此外,包含要在 MemSQL 中加载的数据的新文件将仅在一天中的特定时间(通过某些 cron 作业)添加到 S3。因此,如果管道不存在,我想以编程方式创建管道(使用 JDBC),启动管道,然后在成功加载所有数据后停止它(如果在此过程中也处理错误)。此过程将作为每日 cron 作业运行。但是我找不到任何方法来知道所有数据是否已同步。此外,我找不到任何好方法来知道该过程中是否发生了任何错误。
MemSQL 加载器- MemSQL 加载器在完成加载所需数据后会发送状态。因此,我可以在 cron 作业中执行上述作业。但是,由于现在不推荐使用 MemSQL 加载程序,所以我不想使用它。
请建议将数据加载到 MemSQL 表的最佳方法。另外,如果还有其他方法可以做到这一点,请告诉我(除了管道和加载器)。
提前致谢。
解决方案
MemSQL 管道非常适合您的工作负载。正如您所提到的,S3 和 Azure Pipelines 将在新文件可用时自动为您加载。当 Pipeline 不加载数据时,除了极少量的元数据之外,它不会使用系统资源。这是专门设计的,因此您无需手动设置 chron 作业来加载数据。如有必要,您还可以通过该STOP PIPELINE
命令停止加载新文件。
information_schema 数据库中有一些表格,可让您查看所有管道的状态以及所有已命中的错误。具体来说,您可能希望查询PIPELINES_ERRORS
表以获取错误。
推荐阅读
- docker - 如何使用 dockerfile 安装 kubectl 和 helm?
- .net-core - 从 .NET Core 连接到 iSeries 时遇到问题
- bash - Bash脚本如何在一个curl调用中提取两个变量中的状态代码和特定标头值
- node.js - ibm-cos-sdk putObject 没有创建正确的二进制对象
- python - 从目录中过滤掉两个文件名略有不同但扩展名相同并传递给函数的文件
- android-automotive - Android Automotive 中允许的第三方应用
- scala - 金属的 VS 代码错误的调试/运行问题
- c++ - 是否可以在 cpp 中转换为固定大小的数组?
- javascript - 上传、存储和加载图像
- sql-server - SQL Server:STRING_SPLIT() 生成计算列