зацикливание в преобразовании чайника

Я хочу повторно выполнить SQL-запрос, выглядящий так:

SELECT '${date.i}' AS d, 
  COUNT(DISTINCT xid) AS n
FROM table 
WHERE date 
  BETWEEN DATE_SUB('${date.i}', INTERVAL 6 DAY) 
    AND '${date.i}'
;

В основном это группировка по промежуткам времени, просто они пересекаются, что предотвращает использование GROUP BY.

Вот почему я хочу повторять запрос каждый день в течение определенного промежутка времени. Но я не уверен, как мне реализовать цикл. Какое решение вы бы предложили?

Переменная Kettle date.i инициализируется глобальной переменной. Преобразование является лишь одним из нескольких в одном наборе преобразований. «Стоп-трафик» может быть реализован, возможно, неявно, просто без повторного входа в цикл.

Вот блок-схема:

введите здесь описание изображения


person Raffael    schedule 08.04.2013    source источник


Ответы (2)


Поток трансформации:

введите здесь описание изображения

На шаге «ВВОД» я создаю набор результатов с тремя идентичными полями, сохраняя даты от ${date.from} до ${date.until} (переменные Kettle). (для получения подробной информации об этом методе ознакомьтесь с моей статьей об этом - Генерация виртуальных таблиц для операций JOIN в MySQL).

На шаге «ВЫБОР» я устанавливаю используемый источник данных («ВХОД») и хочу, чтобы «ВЫБОР» выполнялся для каждой строки в обслуживаемом наборе результатов. Поскольку Kettle отображает параметры 1 на 1 безликим вопросительным знаком, мне приходится трижды обслуживать один и тот же параметр - для каждого использования.

«Вывод текстового файла», наконец, выводит результат в общем виде. Просто имя файла должно быть установлено.

Содержимое результирующего текстового вывода за период с 01.01.2013 по 05.01.2013:

d;n
2013/01/01 00:00:00.000;3038
2013/01/02 00:00:00.000;2405
2013/01/03 00:00:00.000;2055
2013/01/04 00:00:00.000;2796
2013/01/05 00:00:00.000;2687

Я не уверен, что это самое изящное решение, но оно помогает.


введите здесь описание изображения

person Raffael    schedule 11.04.2013

В Kettle вы хотите избежать циклов, и они могут вызвать серьезные проблемы при преобразованиях. Вместо этого вы должны сделать это, добавив шаг, который поместит строку в поток для каждой желаемой даты (со значением, хранящимся в поле), а затем используя это значение поля в запросе.

ETA: Поток — это то, что перемещает строки (записи) между этапами. Это может помочь представить его как состоящую из таблицы на каждом прыжке, которая временно содержит строки между шагами.

Вы хотите избежать циклов, потому что преобразование Кеттла является последовательным только на уровне строки: строки могут обрабатываться параллельно и не по порядку, и единственная гарантия состоит в том, что строка пройдет через шаги по порядку. Из-за этого цикл в преобразовании не работает так, как вы интуитивно ожидаете.

К вашему сведению, похоже, вам также может понадобиться пройти некоторые учебные пособия по Kettle, если вы все еще не понимаете, что такое поток.

person G Gordon Worley III    schedule 08.04.2013