首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Scriptella进行ETL多个文件?

如何使用Scriptella进行ETL多个文件?
EN

Stack Overflow用户
提问于 2012-09-12 07:19:58
回答 1查看 2.9K关注 0票数 3

我拥有由日志报告生成的多个日志文件1.csv、2.csv和3.csv。我想读取这些文件并使用Scriptella并发解析它们。

EN

回答 1

Stack Overflow用户

发布于 2012-09-18 10:34:03

Scriptella不提供即时并行作业执行。相反,您应该使用操作系统或编程环境提供的作业调度程序(例如,通过向ExecutorService提交作业来运行多个ETL文件)。

下面是一个导入指定为系统属性的单个文件的工作示例:

ETL文件

代码语言:javascript
复制
<!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>

并行运行文件的代码:

代码语言:javascript
复制
//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);
    }
}

Tu运行这个示例,创建3个csv文件input1.csv、input2.csv和input3.csv,并将它们放在当前的工作目录中。CSV文件示例:

代码语言:javascript
复制
Level, Message
INFO,Process 1 started
INFO,Process 1 stopped   
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12383025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档