Pentaho Чайник Ложка Манипуляции с датой

Я использую Pentaho Spoon для трансформации. Я использую «Ввод таблицы» и объединяю несколько таблиц, чтобы получить окончательную выходную таблицу.

Мне нужно добиться:

SELECT COUNT(distinct ID)
FROM TBLA join TBLB ON TBLA.ID=TBLB.ID
WHERE
  TBLA.ID=334
  AND TBLA.date = '2013-1-9'
  AND TBLB.date BETWEEN '2012-11-15' AND '2013-1-9';

Я вручную вставляю «2012-11-15», но я использую Get System Data для вставки «2012-1-9». Я использую 1 Get System Data.

Мой запрос:

SELECT COUNT(distinct ID)
FROM TBLA join TBLB ON TBLA.ID=TBLB.ID
WHERE
  TBLA.ID=334
  AND TBLA.date='?'
  AND TBLB.date BETWEEN '2012-11-15' AND '?';

Я получаю сообщение об ошибке в табличном вводе, говорящее No value specified for parameter 2

Любое предложение будет оценено.

Спасибо.


person Mario    schedule 10.01.2013    source источник


Ответы (2)


Простой это; Вам нужно «продублировать» системную дату. Итак, добавьте еще одну строку в «получить системные данные» под названием «date2» или что-то в этом роде, сделайте ее такой же, как и первая строка, а затем она заполнит 2-й параметр или?

ИЛИ просто измените запрос, чтобы сказать между «2012-11-15» и TBLA.date, тогда вам не нужен второй параметр

person Codek    schedule 11.01.2013
comment
Спасибо за ответ. На шаге «получить системные данные» все, что я вижу, — это параметры фиксированной даты, такие как вчерашняя дата, сегодняшняя дата и т. д. Как мне ввести свою собственную дату вручную, например «2012-12-3» или «2012-12-4» и т.д. в качестве даты ввода запроса? - person Mario; 14.01.2013
comment
Просто используйте шаг Добавить константы. - person Codek; 14.01.2013
comment
Я удалил шаг «Получить информацию о системе» и напрямую загрузил таблицы с помощью шага «Добавить константу». Таким образом, в основном моя таблица получает данные только из шага «Добавить константу» с именем «Date1», типом «Date», форматом «yyyy-MM-dd» и значением «2013-01-01». Предполагается, что 2013-01-01 заменит даты запроса 'выберите идентификатор из таблицы A, где дата = ?; Но когда я запускаю преобразование, я ничего не вижу в своем выводе. Любое предложение? Также один из моих запросов похож на «выберите идентификатор из таблицы A, где дата между? и ?' Любое предложение для этого? Большое Вам спасибо. - person Mario; 14.01.2013
comment
в шаге должно быть столько строк, сколько знаков ? в запросе. вы также должны отметить опцию использования данных из предыдущего шага и выбрать соответствующий шаг. если ничего не помогает, просмотрите данные из шага, чтобы убедиться, что они поступают правильно. - person Codek; 14.01.2013
comment
Теперь я понимаю, что у меня есть несколько входов для нескольких '?' ценности. Я все еще застрял в постоянном вводе запроса. Я использую шаг «Добавить константы», чтобы указать имя (NewDate), тип (дата), формат (гггг-мм-дд) и значение 2013-01-02. Затем я передаю его на шаг «получить системную информацию» с типом «результат ввода предыдущего задания». Но все равно выхода не вижу. Любое предложение? :) - person Mario; 14.01.2013
comment
Ах хорошо; Еще одна особенность PDI. Некоторые шаги, например. get system info приведет к запуску строки данных. но добавлять константы не буду. Таким образом, вам нужно сначала ввести строку в шаг добавления констант, возможно, используя шаг генерации строк, который просто генерирует 1 строку. - person Codek; 15.01.2013
comment
Я передал строки генерации в таблицы напрямую, и это работает! Спасибо @codek! - person Mario; 17.01.2013

Лично я предпочитаю шаблон шага Get System Info/Add Constants для создания одной строки с несколькими столбцами, которые передаются на шаг соединения с базой данных. Затем вы заменяете параметры в своем запросе столбцами вместо строк, и вы можете указать столбец более одного раза.

person Brian.D.Myers    schedule 22.05.2013