使用Scriptella

时间:2015-09-03 11:33:49

标签: export-to-csv scriptella

我正在研究一个ETL脚本,该脚本从数据库中读取数据,使用Java对其进行操作,最后将其写入CSV文件。我的脚本看起来像这样:

<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文件。但我需要的是一种创建比查询结果更多或更少行的方法。因此,我希望根据Java部分中设置的值对CSV文件进行条件输出:

    <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>

这种方法不起作用。即使我设置了&#39; a&#39;的值,它也不会向CSV写入任何内容。显然是1.那么在Scriptella中执行条件脚本执行的正确方法是什么?或者是否有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

知道了。您只需使用varibale的名称,而不必使用&#39; $&#39;符号

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

对于String值,您必须在比较String周围使用引号。

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