Как ETL делается для GemStone Smalltalk?

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

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

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

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

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

1 ответ

Решение

инсценировка

Я подозреваю, что причина того, что в большинстве сред "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, они просто делают это внутренне, а ситуации гораздо более специфичны для конкретной ситуации.

Другие вопросы по тегам