2015-09-03 53 views
1

我正在研究一個從數據庫讀取數據的ETL腳本,使用Java對其進行操作並最終將其寫入CSV文件。我的腳本如下所示:有條件地使用Scriptella寫入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中執行有條件的腳本執行的正確方法是什麼?還是有更好的解決方案?

回答

1

明白了。您只需使用varibale的名稱,而不使用'$'符號。

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