Есть ли очевидный способ уменьшить количество строк при использовании Kiba? - PullRequest
1 голос
/ 31 марта 2020

Во-первых - Тибо, спасибо за Кибу. Он идет в ногу с инструментами ETL уровня предприятия и никогда меня не подводил.

Я занят созданием конвейера ETL, который берет несколько строк и сводит их к единой сводке строка. У меня такое ощущение, что это должно быть просто, но я немного озадачен тем, как подойти к этой проблеме.

У нас есть несколько CDR от голосового коммутатора, и нам нужно сжать их под некоторыми простые критерии в горстку кратких отчетов. Итак, проблема в том, У меня есть много тысяч записей, поступающих с Source, и мне нужно преобразовать их в несколько записей, основанных на некоторых критериях сокращения.

Kiba действительно прост, когда есть один к одному Source -> Destination ETL, или даже один-ко-многим Source -> Destination с новым перечисляемым анализатором в V3, но я не вижу четкого пути к конвейерам ETL "многие-к-одному".

Буду признателен за любые предложения или рекомендации.

1 Ответ

0 голосов
/ 31 марта 2020

Рад, что вы нашли Кибу полезным! Существуют различные решения для этого варианта использования.

Я делаю некоторые предположения здесь (если они неправильные, решения будут существовать, но будут другими, например, определение границ и внешнее хранилище):

  • Вы работаете с конечными пакетами (а не с непрерывным потоком обновлений).
  • Горстка кратких записей, на которые вы ссылаетесь, может храниться в памяти.

Мой совет здесь заключается в том, чтобы использовать способность Kiba v3 для получения записи в методе close преобразования (более подробно описанном в этой статье ):

class InMemoryReduceTransform
  attr_reader :buffer, :summarize_cb

  def initialize(summarize_cb:)
    @buffer = []
    @summarize_cb = summarize_cb
  end

  def process(row)
    buffer << row
    nil # do not forward the row to the rest of the pipeline
  end

  def close
    summarize_cb(buffer).each do |row|
      yield row
    end
  end
end

По сути, вы просто складывать входные строки до тех пор, пока в источнике не будет данных, после чего будет вызван метод close, а затем вы суммируете имеющиеся у вас данные и получите итоговые строки N.

Примечание: это Упрощенная c реализация, чтобы поставить вас на правильный путь. Следующая итерация Kiba Pro будет включать в себя более масштабируемую и универсальную c версию этой версии (с поддержкой поставщиков). Пожалуйста, обратитесь, если вы заинтересованы в этом!

Дайте мне знать, если это правильно отвечает на ваш вопрос!

...