GemStone Smalltalk的ETL如何完成?

时间:2019-05-02 08:15:56

标签: smalltalk gemstone

我想重新(重新)使用 GemStone / S 重新开始。我已经为关系数据库完成了多个ETL转换,但是对于 GemStone / S 的实现方式,我仍然感到困惑。

我想从不同来源将数据加载到GemStone中。它可以是文件(csv,excel,xml,纯文本等)或其他数据库,例如SQL Server,Postgres,Oracle等。

根据我在页面上看到的,有GemConnect连接到Oracle数据库。您如何从其他数据库或文件中进行操作?是否可以通过ODBC连接?是否有任何数据泵可以这样做,或者您只是“一个”自己而已?

最后,我要问的是如何创建暂存区域,在该暂存区域中您将进行清理,转换并将数据加载到GemStone DB中。是否有任何示例或文档说明如何完成?

注意:SO上只有我找到类似的答案-来自Stephan Eggermont,但这很简短,没有任何“真实”信息。

1 个答案:

答案 0 :(得分:3)

登台

我怀疑大多数环境将“ ETL /分段”作为一个单独的步骤的原因是因为两个端点有些僵化,并且没有用于数据操作的良好编程语言。也就是说,如果您具有TXT,CSV,XML,JSON或SQL,并且需要其他格式/架构,则必须进行“转换”。但是,如果您使用的是GemStone,则可以在Smalltalk中进行转换-不需要单独的步骤。

文件

如果您有文件(TXT,CSV,XML,JSON等),请使用GsFile。实际上,如果另一个端点可以处理文件,则只需以一种约定的格式从一个源导出,然后以另一种格式导入(通过GemStone进行转换的“繁重工作”)。文件更简单,它们避免了通信层,并且使调试变得很简单(如果源未创建文件,则是源的问题;如果它在挂起的目录中则尚未处理它(目标问题) );如果它位于完整目录中,则表明目的地已经对其进行了处理)。

使用这种方法,您可以在GemStone中启动(一个或多个)后台作业以查看目录,打开文件进行读取,处理该文件,然后将其移动到另一个目录。除了基本的字符串操作外,您只需要使用GsFile。然后,您可以在数据库中创建和更新对象。

ODBC

尽管可以从GemStone向ODBC库(或与GemConnect一样对数据库的本机库)进行FFI调用,但这可能不必要地复杂。相反,我将使用与外部系统具有更好交互性的工具来创建另一层。该层可以编写文本文件(如上所述),或者使用适当的接口直接与GemStone通信。我的倾向是使用Dolphin提取数据(良好的ODBC支持),然后直接从Dolphin与GemStone通信。您可以使用其他客户端Smalltalk方言(Pharo,VA或VW),甚至使用另一种语言(我有一个学生正在研究GemStone的Python界面)做类似的事情。

O / R映射

再一次,您需要一种方法来获取一种格式的数据并将其转换为另一种格式。这些往往是特定于领域的,我们发现编写Smalltalk代码更加容易。另外,您可以在Pharo,VA,大众汽车等公司使用类似GLORP的东西。

最佳做法

我认为您在GemStone中没有找到ETL的任何“最佳实践”,因为这不是我们认为是外部过程或单独步骤的东西。只是如何与文件(GsFile),套接字(GsSocket),库(CLibrary)或客户端(GCI)通信。从这里我们可以看到内部处理问题,例如多个生产者和一个消费者(RcQueue),或者一个生产者和多个消费者(locking)。

因此,并非GemStone应用程序不执行ETL,而是在内部执行ETL,而情况则更因情况而异。