如何使用Scriptella到ETL多个文件?(How to ETL multiple files

2019-09-22 08:11发布

我有一个日志报表生成多个日志文件1.csv,2.csv和3.csv。 我想读这些文件并同时使用Scriptella解析。

Answer 1:

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);
    }
}

屠运行这个例子创建3个CSV文件中input1.csv,input2.csv和input3.csv并把它们放在当前工作目录。 CSV文件的实施例:

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


文章来源: How to ETL multiple files using Scriptella?