2015-09-03 3 views
1

Я работаю над скриптом ETL, который считывает данные из БД, манипулирует им с помощью Java и, наконец, записывает его в файл CSV. Мой сценарий выглядит следующим образом:Условное письмо в CSV-файл с Scriptella

<query connection-id="db"> 
    SELECT COLUMN_A AS A, COLUMN_B AS B 
    FROM DATABASE_TABLE 

    <script connection-id="java"> 
     System.setProperty("a",String.valueOf(get("A"))); 
     System.setProperty("b",String.valueOf(get("B"))); 
    </script> 

    <script connection-id="csv_out"> 
     $a,$b 
    </script> 

</query> 

Сценарии работает таким образом, что я получаю одну строку записывается в файл CSV для каждой строки в результате запроса. Но мне нужен способ создания более или менее строк, чем результат запроса. Поэтому я хочу, условный вывод в файл CSV, на основе значений, установленных в части Java:

<script connection-id="java"> 
     System.setProperty("a",String.valueOf(get("A"))); 
     System.setProperty("b",String.valueOf(get("B"))); 
    </script> 

    // only create line when 'a' has specific value, e.g. '1' 
    <script connection-id="csv_out" if="$a == 1"> 
     $a,$b 
    </script> 

Этот подход не работает. Он ничего не пишет для CSV, даже если я задал значение «a» явно на 1. Итак, каков правильный способ выполнения условного скрипта в Scriptella? Или есть еще лучшее решение?

ответ

1

Got it. Вам просто нужно использовать имя varibale без символа '$'.

// only create line when 'a' has specific value, e.g. 1 
<script connection-id="csv_out" if="a == 1"> 
    $a,$b 
</script> 

Для значений String вы должны использовать кавычки вокруг строки сравнения.

// only create line when 'a' has specific value, e.g. 'ok' 
<script connection-id="csv_out" if="a == 'ok'"> 
    $a,$b 
</script>