3

ログレポートによって生成された複数のログファイル1.csv、2.csv、および3.csvがあります。これらのファイルを読み取り、Scriptellaを使用して同時に解析したいと思います。

4

1 に答える 1

3

Scriptella は、すぐに使用できる並列ジョブ実行を提供しません。代わりに、オペレーティング システムまたはプログラミング環境によって提供されるジョブ スケジューラを使用する必要があります (たとえば、ExecutorService にジョブを送信して複数の ETL ファイルを実行します)。

システム プロパティとして指定された単一のファイルをインポートする実際の例を次に示します。

ETL ファイル:

<!DOCTYPE etl SYSTEM "http://scriptella.javaforge.com/dtd/etl.dtd">
<etl>
    <connection id="in" driver="csv" url="$input"/>
    <connection id="out" driver="text"/>
    <query connection-id="in">
        <script connection-id="out">
            Importing: $1, $2
        </script>
    </query>
</etl>

ファイルを並行して実行する Java コード:

//Imports 3 csv files in parallel using a fixed thread pool
public class ParallelCsvTest {
    public static void main(String[] args) throws EtlExecutorException, MalformedURLException, InterruptedException {
        final ExecutorService service = Executors.newFixedThreadPool(3);
        for (int i=1;i<=3;i++) {
            //Pass a name as a parameter to ETL file, e.g. input<i>.csv
            final Map<String,?> map = Collections.singletonMap("input", "input"+i+".csv");
            EtlExecutor executor = EtlExecutor.newExecutor(new File("parallel.csv.etl.xml").toURI().toURL(), map);
            service.submit((Callable<ExecutionStatistics>)executor);
        }
        service.shutdown();
        service.awaitTermination(10, TimeUnit.SECONDS);
    }
}

この例を実行すると、input1.csv、input2.csv、input3.csv の 3 つの csv ファイルが作成され、現在の作業ディレクトリに配置されます。CSV ファイルの例:

Level, Message
INFO,Process 1 started
INFO,Process 1 stopped   
于 2012-09-18T10:34:03.673 に答える