ложка пентахо: как условно вставить значение в колонку? - PullRequest
0 голосов
/ 25 июня 2019

Итак, в моей таблице есть столбцы quantity и comment.Если значение в quantity больше 0, то мне нужно вставить строку «доступно» в столбец comment, если оно равно 0, то «на заказ» и, наконец, если оно меньше нуля, то «предупреждение»,Что может быть лучшим способом?

отредактировано: Думаю, мой вопрос выше не показывает всю необходимую работу.

Сначала у меня есть текстовый файл, в котором я получаю поля, включающие quantity.

Затем я делаю некоторые модификации данных (на шаге формулы я делаю некоторые вычисления на quantity).

В конце я использую шаг Table output, чтобы вставить их в BD.Одним из полей для вставки является quantity.

Мой главный вопрос:

Лучше ли вставлять значения в столбец comment после шага Table output (когда quantityуже добавлено в BD) с помощью шага сценария SQL?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

У вас есть в основном 3 варианта:

  1. Шаг строк фильтра, чтобы разделить поток на основе значения количества, затем у каждого из выходных потоков есть шаг Добавить константы, чтобы добавитьновое поле, которое вы хотите, затем объедините их снова, соединив оба шага добавления констант с пустышкой;

  2. пользовательское выражение java

  3. JavaScriptшаг.

Вариант 2, вероятно, самый чистый;вариант 3 в основном такой же, как вариант 2, но с javascript вместо java-кода;Преимущество варианта 1 заключается в том, что он не требует какого-либо кода (хотя, поскольку альтернативой является однострочник, на самом деле это не проблема).Кроме того, в варианте 1 порядок строк не обязательно поддерживается.

0 голосов
/ 26 июня 2019

** ответ больше не применяется с новыми подробностями вопроса **

Если вы обновляете таблицу базы данных, безусловно, лучшее и наиболее эффективное решение - это сделать это в одном операторе SQL.

В задании Pentaho добавьте шаг SQL (в сценарии).

На этом шаге введите команду SQL.Это будет похоже на:

UPDATE MyTable
SET comment = 
    CASE 
        WHEN quantity > 0 THEN 'available'
        WHEN quantity < 0 THEN 'warning'
        ELSE 'to order'
    END
// next line optional, use it if you only need to update some of the records.
WHERE (insert conditions here if you need any)

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

...