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