Как ETL несколько файлов с помощью Scriptella?

У меня есть несколько файлов журнала 1.csv,2.csv и 3.csv, сгенерированных отчетом журнала. Я хочу прочитать эти файлы и проанализировать их одновременно, используя Scriptella.

1 ответ

Scriptella не обеспечивает параллельное выполнение заданий из коробки. Вместо этого вам следует использовать планировщик заданий, предоставляемый операционной системой или средой программирования (например, запускать несколько файлов ETL, отправляя задания в ExecutorService).

Вот рабочий пример для импорта одного файла, указанного в качестве системного свойства:

Файл 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);
    }
}

Для запуска этого примера создайте 3 CSV-файла input1.csv, input2.csv и input3.csv и поместите их в текущий рабочий каталог. Пример файла CSV:

Level, Message
INFO,Process 1 started
INFO,Process 1 stopped   
Другие вопросы по тегам