1

DBからデータを読み取り、Javaを使用して操作し、最終的にCSVファイルに書き込むETLスクリプトに取り組んでいます。私のスクリプトは次のようになります。

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

スクリプトは、クエリ結果の行ごとに 1 つの行が 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 に答える