`
trydofor
  • 浏览: 145581 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Scriptella ETL 快速上手

阅读更多

Scriptella ETL 快速上手
作者:臭豆腐[trydofor.com]
日期:2010-07-07
授权:署名-非商业-保持一致 1.0 协议
声明:拷贝、分发、呈现和表演本作品,请保留以上全部信息。

 

文档目录
1. Scriptella 预备知识
许可证:Apache License, Version 2.0
当前版本:Scriptella 1.0 Released (May 5, 2010)
系统需求:JRE 5.0+ (有些driver要求更高JRE,如JSR 223,要JRE6)

典型应用:(官方资料的简译)
  • 执行 SQL,JS,JEXL,Velocity等脚本。
  • 数据库迁移。LDAP,JDBC,XML等数据源的协作。
  • 跨DB的ETL操作,以CSV,文本,XML等格式的导入导出。
  • 作为Ant的一个task。* Db Schema 的自动升级。

官方文档:

2. Scriptella 常用示例
以下示例都是官方网站中比较有代表性的。
这里只是进行了简单的集中和部分注释。

2.1. JavaScript的使用

The following query executes a child script 10 times. As the result of
execution 10 records are inserted into a database table.
Additionally a log file log.txt is produced.

简译:下面的Query执行了10次内嵌Script。
效果是,在DB中插入了10条记录,并产生日志log.txt。

<xml> 完整的ETL文件 
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
<?xml version="1.0" encoding="UTF-8"?> <!-- 指定编码,防止系统弄错字符集 -->
<!DOCTYPE etl SYSTEM "http://scriptella.javaforge.com/dtd/etl.dtd">
<etl>
   <connection id="script" driver="script"/>
   <connection id="out" driver="oracle" url="jdbc:oracle:thin:@localhost:1521:DB"/>
   <connection id="log" driver="script" url="log.txt"/>

   <query connection-id="script">
       <![CDATA[
       for (var i = 0; i < 10; i++) {
           login = 'login' + i;
           //You can instantiate Java objects and invoke static methods
           var now = new java.sql.Timestamp(java.lang.System.currentTimeMillis());
           query.next(); //Executes a child script element // * 执行后续的所有元素
       }]]>

       <!-- Inserts a parameterized row into a database -->
       <script connection-id="out">
           INSERT INTO Table(ID, Login, Login_Time) VALUES (?i, ?login, ?now);
       </script>
       
       <!-- Logs the message using MessageFormat class and parent context variables -->
       <script connection-id="log">
           // create Java String array of 2 elements
           var a = java.lang.reflect.Array.newInstance(java.lang.Object, 2)
           a[0] = now;a[1] = i;
           println(format.format(a));
       >/script>
   </query>
</etl>

2.2. CSV文件的使用

<xml> ETL文件片段 
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
<connection id="in" driver="csv" url="data.csv" />
<connection id="out" driver="csv" url="report.csv">
   #Use empty quote to turn off quoting
   quote=
   separator=;
</connection>
<!-- connection里面可以设置参数,各个connection不一样 -->

<script connection-id="out">
   ID,Priority,Summary,Status
</script>

<query connection-id="in">
   <!--Empty query means select all-->
   <script connection-id="out">
       $rownum,$priority,$summary,$status
   </script>
</query>

<txt> data.csv 
priority,summary,status
11,summary1,21
12,summary1,22

<txt> report.csv 
ID;Priority;Summary;Status
1;11;summary1;21
2;12;summary1;22

解说:
$priority,$summary,$status,就是CVS的头(首行) priority,summary,status。

2.3. 文本文件的使用

大部分时候,我们处理文本,用到Text Driver,然后用正则表达式匹配行划分组。示例比较简单。

2.4. 发送邮件的使用

<xml> HTML邮件 
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
<etl>
   <connection driver="mail" url="mailto:user@nosuchhost.com?subject=Hello"
           classpath="mail.jar:activation.jar">
       type=html
       mail.smtp.host=mail.host.name
       mail.user=user
       mail.password=password
       mail.from=Firstname Lastname <user@nosuchhost.com>
   </connection>
   <script><![CDATA[
       <html>
           <body>
               Hello,
               <hr>
               <a href="http://scriptella.javaforge.com/" title="Powered by Scriptella ETL">
                   <img src="http://scriptella.javaforge.com/images/scriptella-powered.gif" 
                           width="88" height="31" border="0" alt="Powered by Scriptella ETL">
               </a>
           </body>
       </html>]]>
   </script>
</etl>

<xml> 动态发邮件 
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
<etl>
   <connection id="mail" driver="mail" url="mailto:$email?subject=Hello $name"
           classpath="mail.jar:activation.jar">
       mail.smtp.host=mail.host.name
       mail.user=user
       mail.password=password
       mail.from=Administrator <user@nosuchhost.com>
   </connection>
   <connection id="db" .../>
   <query connection-id="db" >
       SELECT * FROM Users
       <script connection-id="mail">
           #$rownum
           Message produced by Scriptella ETL
       </script>
  </query>
</etl>

2.5. M$ Excel的使用

把 Excel当Db使用,因为是JDBC驱动。

<xml> ETL文件片段 
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
<connection id="xls" url="jdbc:xls:file:report.xls" classpath="sqlsheet-0.1.0.jar; poi-3.0.2-FINAL-20080204.jar; jsqlparser.jar" />

<script connection-id="xls">
   CREATE TABLE SHEET1(
               COL1 INT,
               COL2 INT
       );
</script>
...
<query connection-id="db">
   ...
   <script connection-id="xls">
       INSERT INTO SHEET1 (COL1,COL2) VALUES(${rownum},${col2_value});
   </script>
</query>

3. Scriptella 注意事项

  • query标签,只能用来查询数据,UPDATE,INSERT,DELETE要用Script。
  • if="priority == $priority",query/script属性if里变量的使用。
  • INSERT INTO $TABLE2 VALUES (?V1, ?{V2+V3}) 变量的使用方法和作用。
  • 变量的作用域是自身和子标签,父标签的同名变量被隐藏。



原始地址:http://trydofor.com/a9w3-auhome/trydofor/article/2010/0707113250/body.htm
分享到:
评论

相关推荐

    支持国产ETL etl-engine 用go写的轻量级etl引擎 方便集成到各企业中

    etl-engine的核心思想是为用户快速搭建ETL产品提供解决方案,让用户低代码乃至零代码将ETL产品集成到自己的项目或产品生态中。该产品由etl-engine引擎和etl-designer云端设计器及etl-crontab调度组成。etl-engine...

    ETL实战ETL实战

    ETL实战ETL实战ETL实战ETL实战

    很全的ETL学习资料

    BI项目中ETL设计与思考.docx DataStage(ETL)技术总结.docx ETL增量抽取.docx ETL增量抽取方式.docx ETL工具点评.docx ETL常见性能瓶颈.docx ETL构建企业级数据仓库五步法.docx ETL高级教程.docx 三大主流ETL工具选型...

    ETL工具Beeload快速入门

    以示例方式介绍Beeload使用方式,内容涵盖ETL 、数据同步、文件同步、邮件通知、工作流、数据分析等常用操作。

    Java分布式ETL框架

    Java分布式ETL框架

    ETL架构师面试题

    它对ETL项目组的作用是什么? 2.在数据仓库项目中,数据探索阶段的主要目的是什么? 3.如何确定起始来源数据? 架构 4.在ETL过程中四个基本的过程分别是什么? 5.在数据准备区中允许使用的数据结构有哪些?各有...

    Clover DX ETL

    大规模设计和自动化数据作业

    ETL工具 ,基于Kettle实现的Web版ETL工具

    ETL工具 ,基于Kettle实现的Web版ETL工具,实现简单的数据抓取功能

    BI ETL ELT Kettle 基础知识中文文档汇总

    BI ETL ELT Kettle 基础知识中文文档汇总 BI项目中ETL设计与思考.pdf CTL工具.pdf ETL-开发规范.pdf ETL_--_事实表.pdf ETL_文档.pdf ETL_架构.pdf ETL_调度系统技术方案说明书_V1.0.pdf ETL中的数据清洗...

    1、ETL工程师经典面试题.md

    5. 在 ETL过程中四个基本的过程分别是什么? 6. 从 ERP源系统中抽取数据最好的方法是什么? 7. 简述直接连接数据库和使用 ,ODBC连接数据库进行通讯的优缺点。 8. 什么是代理键?简述代理键替换管道如何工作。 9. ...

    传统数据仓库ETL设计报告

    ETL升级一方面采用元数据驱动ETL的方式,通过配置元数据驱动ETL;另一方面,在ETL调度控制方面,采用结合数据质量校验的ETL调度

    ETL详解.docx

    1 ETL是什么 3 2 ETL和大数据有什么关联 3 3 ETL有哪些过程,要进行哪些操作 3 3.1 抽取作业 4 3.1.1 手工开发抽取作业时候的常用方法 4 3.1.2 更新数据的时间和数量的问题 5 3.2 转换作业 8 3.2.1 数据清洗 8 3.2.2...

    ETL系列专题2 ETL数据结构

    ETL架构设计系列,介绍ETL Staging Area架构原则和常用数据结构

    ETL简介,介绍了ETL的基础知识

    介绍ETL

    ETL学习资料

    1.什么是ETL 2.BI项目中ETL设计与思考 3.DataStage(ETL)技术总结 4.ETL常见性能瓶颈 5.ETL高级教程 6.ETL工具点评 7.ETL构建企业级数据仓库五步法 8.ETL增量抽取 9.ETL增量抽取方式 10.三大主流ETL工具选型 11.商务...

    《ETL数据整合与处理(Kettle)》教学教案 —02源数据获取.pdf

    《ETL数据整合与处理(Kettle)》教学教案 —02源数据获取.pdf《ETL数据整合与处理(Kettle)》教学教案 —02源数据获取.pdf《ETL数据整合与处理(Kettle)》教学教案 —02源数据获取.pdf《ETL数据整合与处理(Kettle)》...

    《ETL数据整合与处理(Kettle)》教学教案 —03记录处理.pdf

    《ETL数据整合与处理(Kettle)》教学教案 —03记录处理.pdf《ETL数据整合与处理(Kettle)》教学教案 —03记录处理.pdf《ETL数据整合与处理(Kettle)》教学教案 —03记录处理.pdf《ETL数据整合与处理(Kettle)》教学教案 ...

    SQL Server 2005 ETL 专家系列

    SQL Server 2005 ETL专家系列之一:SQL Server DTS的前世今生 SQL Server 2005 ETL专家系列之二:SQL Server 2005 Integration Service的基本任务 SQL Server 2005 ETL专家系列之三:SQL Server 2005 Integration ...

    ETL Automation 工具简介.pptx

    ETL Automation 是由 Teradata 公司发布的 ETL 流程调度产品,使用 JAVA 程序开发,支持跨平台部署,安装、维护简单。

    kettle etl

    kettle使用,用来各个数据库之间ETL数据抽取,功能比较全面。

Global site tag (gtag.js) - Google Analytics