Как ETL делается для GemStone Smalltalk? - PullRequest
2 голосов
/ 02 мая 2019

Я хотел бы (пере) запустить снова с GemStone / S .Я сделал несколько преобразований ETL для реляционных баз данных, но я все еще не совсем уверен, как это делается на GemStone / S .

Я хотел бы загрузить данные в GemStone из разных источников.Это могут быть файлы (CSV, Excel, XML, простой текст и т. Д.) Или другие БД, такие как SQL Server, Postgres, Oracle и т. Д.

Из того, что я видел на страницах, есть GemConnect , который подключается к базам данных Oracle.Как вы делаете это из других баз данных или файлов?Есть ли возможность подключиться через ODBC?Есть ли какой-то насос данных, чтобы сделать это, или вы «просто» должны один сам?

В конце я спрашиваю, как вы создаете промежуточную область, где вы бы очистить, преобразовать, а затемзагрузить данные в БД GemStone.Есть ли примеры или документация, как это делается?

Примечание. Единственный похожий ответ, который я нашел, находится на SO - от Stephan Eggermont , но он был коротким ибез какой-либо "реальной" информации.

1 Ответ

3 голосов
/ 02 мая 2019

Балетмейстер

Я подозреваю, что причина того, что в большинстве сред "ETL / staging" является отдельным шагом, заключается в том, что две конечные точки несколько жесткие и не имеют хорошего языка программирования для манипулирования данными. То есть, если у вас есть TXT, CSV, XML, JSON или SQL, и вам нужен другой формат / схема, тогда кто-то должен выполнить «преобразование». Но если вы работаете в GemStone, вы можете выполнить преобразование в Smalltalk - нет необходимости в отдельном шаге.

Файлы

Если у вас есть файлы (TXT, CSV, XML, JSON и т. Д.), Используйте GsFile . На самом деле, если другая конечная точка может работать с файлами, просто экспортируйте из одного источника в согласованном формате и затем импортируйте в другой (GemStone выполняет «тяжелую работу» по преобразованию). Файлы проще, они избегают коммуникационного уровня и делают отладку тривиальной (если источник не создал файл, то это проблема источника; если он находится в ожидающем каталоге, то еще не обработал его (проблема назначения) ); если он находится в завершенном каталоге, то получатель обработал его).

При таком подходе вы запускаете (одно или несколько) фоновых заданий в GemStone, чтобы просмотреть каталог, открыть файл для чтения, обработать файл и затем переместить его в другой каталог. Помимо основных манипуляций со строками, вам нужно работать только с GsFile. Затем вы создаете и обновляете свои объекты в базе данных.

ODBC

Хотя было бы возможно сделать вызовы FFI из GemStone в библиотеку ODBC (или в собственную библиотеку базы данных, как это делается с GemConnect), это, вероятно, будет излишне сложным. Вместо этого я бы создал еще один слой, используя инструменты, которые лучше взаимодействуют с внешней системой. Этот слой может записывать текстовые файлы (как описано выше) или, с соответствующим интерфейсом, может напрямую связываться с GemStone. Я хотел бы использовать Dolphin для извлечения данных (хорошая поддержка ODBC), а затем напрямую связаться с GemStone от Dolphin. Вы можете сделать что-то подобное с другими клиентскими диалектами Smalltalk (Pharo, VA или VW) или даже с другого языка (у меня есть студент, работающий над интерфейсом Python для GemStone).

O / R Mapping

Здесь снова вам нужен способ взять данные в одном формате и перевести их в другой. Они, как правило, сильно зависят от предметной области, и нам проще писать код на Smalltalk. Кроме того, вы можете использовать что-то вроде GLORP в Pharo, VA, VW и т. Д.

Лучшие практики

Я думаю, что вы не нашли «лучших практик» для ETL в GemStone, потому что это не то, что мы считаем внешним процессом или отдельным шагом. Существует только способ связи с файлом (GsFile), сокетом (GsSocket), библиотекой (CLibrary) или клиентом (GCI). Отсюда мы можем посмотреть на внутренние проблемы обработки, такие как несколько производителей и один потребитель (RcQueue), или один производитель и несколько потребителей ( блокировка ).

Таким образом, это не значит, что приложения GemStone не выполняют ETL, они просто делают это внутренне, а ситуации гораздо более специфичны для конкретной ситуации.

...