1

我正在开发一个 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>

这种方法行不通。即使我将“a”的值明确设置为 1,它也不会向 CSV 写入任何内容。那么在 Scriptella 中执行条件脚本的正确方法是什么?还是有更好的解决方案?

4

1 回答 1

1

知道了。您只需要使用变量的名称,不带“$”符号。

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

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

// only create line when 'a' has specific value, e.g. 'ok'
<script connection-id="csv_out" if="a == 'ok'">
    $a,$b
</script>
于 2015-09-25T06:51:21.220 回答