захват выполненного sql из входной таблицы в pentaho pdi

Я использую pentaho для тестирования миграции данных. Я установил шаг «табличный ввод», где многие части запроса внутри «табличных вводов» являются переменными. Я искал способ зафиксировать этот запрос после его выполнения во время выполнения. Мне было интересно, есть ли какие-то конкретные переменные системного журнала для sql или это связано с метаданными. нужна помощь! Спасибо


person user3612661    schedule 07.05.2014    source источник
comment
Чайник имеет некоторый механизм автоматической регистрации, который вы можете использовать. Боюсь, вам придется более подробно описывать свои требования. Кроме того, нам нужно знать, что именно вы имеете в виду, говоря, что многие части запроса внутри входных данных таблицы являются переменными.   -  person Marcus Rickert    schedule 08.05.2014
comment
Я просто хочу захватить выполненный sql и вставить этот sql в свою собственную таблицу журнала.   -  person user3612661    schedule 08.05.2014
comment
Вы думаете о динамически генерируемом операторе SQL? Насколько мне известно, операторы SQL в Kettle обычно статичны.   -  person Marcus Rickert    schedule 08.05.2014
comment
пример на шаге входной таблицы у меня будет такой запрос: выберите $ {column_names} из emp; поэтому эта переменная column_name будет установлена ​​из предыдущего преобразования. теперь, когда этот sql запускается, мне нужен способ захватить только этот sql.   -  person user3612661    schedule 08.05.2014
comment
В этом случае было бы достаточно расширить строку, не так ли?   -  person Marcus Rickert    schedule 08.05.2014
comment
да, но мне нужно захватить запрос при его выполнении. таким образом мне не нужно делать это для других подобных шагов.   -  person user3612661    schedule 08.05.2014
comment
Где бы вы хотели использовать захваченный оператор SQL? Почему важны сроки?   -  person Marcus Rickert    schedule 08.05.2014
comment
время важно, потому что мой журнал должен показывать только то, что действительно было выполнено. Я думал, что есть способ использовать jacascript или java. Я нашел какого-то парня, использующего мета-объект.   -  person user3612661    schedule 08.05.2014


Ответы (2)


Может быть, поможет следующий подход:

  • Мы предполагаем преобразование, считывающее файл CSV, чтобы получить динамическую часть оператора SELECT (например, столбцы) и установить с ней переменную columns.

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

  • Второе преобразование использует эту переменную для генерации оператора SELECT и сохранения его в переменной sql_statement.

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

  • В основном преобразовании мы используем ${sql_statement} в качестве оператора SELECT для ввода таблицы и записываем данные в выходной файл (так сказать, бизнес-процесс). Из того же ввода мы копируем вывод на другой путь. Там мы добавляем текущее время как поле (используйте элемент «Получить системные данные»), и мы добавляем сгенерированный оператор SQL, объединяем их как декартово произведение и группируем результат по sql_statement. Таким образом, мы можем вычислить первый и последний раз, когда оператор использовался. Эти результаты записываются в текстовый файл.

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

  • Последнее, что нам нужно, это задание, вызывающее три преобразования последовательно.

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

Это пример вывода:

sql_statement;min_time;max_time
SELECT my_column FROM test_table;2014/05/08 00:41:21.143;2014/05/08 00:41:21.144
person Marcus Rickert    schedule 08.05.2014

Спасибо, Маркус! Я сделал нечто подобное. Оно работает. классно. Я собрал части запросов из поля таблицы, где они хранились, и сформировал полный запрос на javascript. После этого полный запрос будет отправлен в качестве параметра преобразованию, которое запустит и запишет запрос.

person user3612661    schedule 14.05.2014