我正在开发一个 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 中执行条件脚本的正确方法是什么?还是有更好的解决方案?