2012-09-12 1 views

ответ

3

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 a d поместите их в текущий рабочий каталог. Пример файла CSV:

Level, Message 
INFO,Process 1 started 
INFO,Process 1 stopped 
+0

@ ejboy- Предположим, я хочу передать input1.csv из командной строки в окнах, то как бы я пойти на это> –

+0

Вы можете использовать переменную «арг» в примере. Он содержит аргументы строки cmd. – ejboy

+0

Может ли plz дать его подробно, написав код командной строки? :) –

Смежные вопросы