Script Ella 2 Minute Tutorial
Script Ella 2 Minute Tutorial
Script Ella 2 Minute Tutorial
Installation
Use Scriptella as Ant Task
Command-Line Execution
Executing ETL Files from Java
Examples
o Copy table to another database
o Working with BLOBs
o Supporting several SQL dialects
Installation
Download Scriptella binary distribution.
Unpack it and add a <SCRIPTELLA_DIR>/bin to a system PATH variable.
<taskdef resource="antscriptella.properties"
classpath="/path/to/scriptella.jar[;additional_drivers.jar]"/>
Note
Additional drivers classpath entries are optional. You may directly specify classpath attribute in a connection XML
element declaration. Example:
<connection driver="sybase" classpath="jconn3.jar"/>
or
<etl file="path/to/your/file/> <!-- Execute ETL file from specified location -->
Command-Line Execution
Just type scriptella to run the file named etl.xml in the current directory. Alternatively you can use java
launcher:
See EtlExecutor Javadoc for more details on how to execute ETL files from Java code.
Examples
Assume Database #1 contains Table Product with id, category and name columns. The following script copies
software products from this table to Database #2. Additionally Name column is changed to Product_Name.
etl.xml:
<etl>
<connection id="db1" url="jdbc:database1:sample" user="sa" password=""
classpath="external.jar"/>
<connection id="db2" url="jdbc:database2:sample" user="sa" password=""/>
<query connection-id="db1">
<!-- Select product from software category in db1-->
SELECT * FROM Product WHERE category='software';
<!-- for each row execute a script -->
<script connection-id="db2">
<!-- Insert all selected products to db2
use ? to reference properties, columns or ?{expressions}-->
INSERT INTO Product(id, category, product_name) values (?id, ?{category}, ?
name);
</script>
</query>
</etl>
etl.xml:
<etl>
<connection url="jdbc:hsqldb:file:tracks" user="sa" password=""/>
<script>
CREATE TABLE Track (
ID INT,
ALBUM_ID INT,
NAME VARCHAR(100),
DATA LONGVARBINARY
);
<!-- Inserts file with path relative to executed script location -->
insert into Track(id, album_id, name, data) values
(1, 1, 'Song1.mp3', ?{file 'song1.mp3'});
<!-- Inserts file from URL-->
insert into Track(id, album_id, name, data) values
(2, 2, 'Song2.mp3', ?{file 'http://musicstoresample.com/song2.mp3'});
</script>
</etl>
<dialect> element allows including vendor specific content. The following example creates database schema for
Oracle/HSQLDB or MySql depending on a selected driver:
<etl>
<properties><!-- Load external properties -->
<include href="etl.properties"/>
</properties>
<connection url="$url" user="$user"
password="$password" classpath="$classpath"/>
<script>
-- In this example dialects are used to
-- include different DDLs for data types:
-- Example: oracle-schema.sql for Oracle
<dialect name="hsql"> <!-- Regular expressions syntax supported-->
<include href="hsqldb-schema.sql"/>
</dialect>
<dialect name="oracle">
<include href="oracle-schema.sql"/>
</dialect>
<dialect name="mysql">
<include href="mysql-schema.sql"/>
</dialect>
-- SQL92 inserts - no need to use dialects
INSERT INTO Product(id, category, product_name)
VALUES (1, 'ETL', 'Scriptella ETL');
INSERT INTO Product(id, category, product_name)
VALUES (2, 'Development', 'Java SE 6');
</script>
</etl>
Note
For additional samples download Scriptella examples distribution. See also Scriptella examples on DZone Snippets