我正在研究一个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中执行条件脚本执行的正确方法是什么?或者是否有更好的解决方案?
答案 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>