Как реализовать локальную БД + внешние источники API в Кибе - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь реализовать следующее задание ETL в Kiba в контексте приложения Rails:

  • Для заданной записи локальной базы данных
  • Поиск по его имени с помощью API удаленного приложения (Evernote)
  • Для каждой записи, найденной с помощью API, получите идентификаторы GUID всех тегов, используемых в этой записи, и объедините их в одном массиве.
  • Используя тот же API, получить полный список используемых тегов, чтобы получить их метки из GUID
  • Обработать эти теги (сохранить, игнорировать, заменить) на основе внутренней бизнес-логики c
  • Сохраните эти теги в записи локальной базы данных

Мой вопрос: как бы вы смоделировали источники в этом примере?

Отправной точкой является запись локальной базы данных, но реальные данные поступают из двух обращений к API (1 / записи, возвращаемые поиском, и 2 / полный список тегов).

Спасибо!

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете смоделировать это следующим образом: если вы получите список идентификаторов записей базы данных в некоторой переменной (например, people_ids), вы можете получить что-то вроде первой итерации:

Kiba.parse do
  source Kiba::Common::Sources::Enumerable, -> { people_ids }

  transform do |person_id|
    Enumerator.new do |y|
      # here some HTTP query for search, retrieval of tags etc, and 
      # you would yield each result in a loop
      y << {person_id: person_id, tags: [...] }
    end
  end

  transform Kiba::Common::Transforms::EnumerableExploder
  # SNIP
end      

Как для тегов, если они уже есть в вашей базе данных и в небольших объемах, вы должны были бы загрузить их на ранней стадии, чтобы создать некую форму таблицы поиска:

tags = {}
Kiba.parse do
  pre_process do
    # here preload the tags & data required to decide on your business logic
  end
  # SNIP
end

Таким образом, вы можете позже связывать в конвейере каждое входящее тег с соответствующим идентификатором тега в вашей базе данных, и просто используйте ActiveRecord для вставки отношения.

В качестве альтернативы, если вы хотите уже построенное решение для быстрых вставок / upserts с нашей поддержкой поставщика, вы можете также используйте Kiba Pro , следовательно, поддерживая разработку версии с открытым исходным кодом тоже!

Надеюсь, что это правильно ответит на ваш вопрос, не стесняйтесь комментировать иное!

...