Magnet可以在本地环境和分布式系统处理数据,想要快速使用Magnet,我们需要先熟悉她的配置文件,首先我来向大家介绍一下Magnet的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project SYSTEM "magnet.dtd">
<project>
<parameter>
<variable key="_AppName" value="magnet"/>
<variable key="test" value="4" />
<variable key="age" value="1960-01-01" />
<variable key="wheretest" value="2" />
<variable key="choosetest" value="3" />
<variable key="steptest" value="step1" />
</parameter>
<datasource>
<table id="employees" src="file:///E:\data\employees.txt" separator=",">
<fields>
<field name="emp_no" type="Integer" />
<field name="birth_date" type="Date" />
<field name="first_name" />
<field name="last_name" />
<field name="gender" />
<field name="hire_date" type="Date" />
</fields>
</table>
</datasource>
<workflow>
<sql id="${steptest}" alias="alias1">
<if test="1 == test">
SELECT * FROM employees WHERE gender = 'F' AND birth_date > '1960-01-01'
</if>
<if test="2 == test">
SELECT * FROM employees WHERE gender = 'M' AND birth_date > '${age}'
</if>
<if test="3 == test">
SELECT * FROM employees
<where>
<if test="1 == wheretest">
gender = 'F'
</if>
<if test="2 == wheretest">
AND birth_date > '1960-01-01'
</if>
</where>
</if>
<if test="4 == test">
<choose>
<when test="1 == choosetest">
SELECT * FROM employees WHERE gender = 'F'
</when>
<when test="2 == choosetest">
SELECT * FROM employees WHERE gender = 'M'
</when>
<otherwise>
SELECT * FROM employees WHERE birth_date > '1960-01-01'
</otherwise>
</choose>
</if>
</sql>
<output id="stepOutput" ref="step1" separator="--" type="override"
target="file:///E:data\result" />
</workflow>
</project>
1、配置文件结构
Magnet配置由project标签开始,project标签包含三种标签,parameter、datasource和workflow标签。
2、parameter参数
<parameter>
<variable key="_AppName" value="magnet"/>
<variable key="test" value="4" />
<variable key="age" value="1960-01-01" />
<variable key="wheretest" value="2" />
<variable key="choosetest" value="3" />
<variable key="steptest" value="step1" />
</parameter>
职责:主要负责项目环境配置和项目中使用的变量。
子标签:variable
描述:variable标签包含两个属性key和value,是以对键值对存在,两个值均为字符串格式,其中开头以下划线开头的是系统参数,例如:这里定义了_AppName为项目名称。个人可以自定义变量,自定义变量可以在下面的处理中使用到。
3、datasource数据源
<datasource>
<table id="employees"
src="file:///C:\Users\dell\Desktop\magnet-1.0\employees.txt" separator=",">
<fields>
<field name="emp_no" type="Integer" />
<field name="birth_date" type="Date" />
<field name="first_name" />
<field name="last_name" />
<field name="gender" />
<field name="hire_date" type="Date" />
</fields>
</table>
</datasource>
职责:主要负责数据源的配置和加载
子标签:table
描述:
table标签包含五个属性id、alias、src、format和separator。
- id:标记表的唯一id
- alias:给表起的别名
- src:表数据地址
- format:数据格式,提供TextFile、ORCFile、ParquetFile、AvroFile格式选择,默认为TextFile
- separator:分隔符,默认为不可见字符\001
表数据字段在fields下的field标签表示,field标签有三个属性name、type和precision。
- name:字段名
- type:字段类型,提供String、Boolean、Date、Double、Float、Byte、Integer、Long、Short、Decimal类型,默认为String类型,Date类型数据只支持“yyyy-MM-dd”格式。
- precision:精度,格式为“长度,精度”,只有type=Decimal时有效。
示例中的配置对应下图数据:
10001,1953-09-02,Georgi,Facello,M,1986-06-26
10002,1964-06-02,Bezalel,Simmel,F,1985-11-21
10003,1959-12-03,Parto,Bamford,M,1986-08-28
10004,1954-05-01,Chirstian,Koblick,M,1986-12-01
10005,1955-01-21,Kyoichi,Maliniak,M,1989-09-12
10006,1953-04-20,Anneke,Preusig,F,1989-06-02
10007,1957-05-23,Tzvetan,Zielinski,F,1989-02-10
10008,1958-02-19,Saniya,Kalloufi,M,1994-09-15
10009,1952-04-19,Sumant,Peac,F,1985-02-18
10010,1963-06-01,Duangkaew,Piveteau,F,1989-08-24
10011,1953-11-07,Mary,Sluis,F,1990-01-22
10012,1960-10-04,Patricio,Bridgland,M,1992-12-18
10013,1963-06-07,Eberhardt,Terkki,M,1985-10-20
10014,1956-02-12,Berni,Genin,M,1987-03-11
10015,1959-08-19,Guoxiang,Nooteboom,M,1987-07-02
10016,1961-05-02,Kazuhito,Cappelletti,M,1995-01-27
10017,1958-07-06,Cristinel,Bouloucos,F,1993-08-03
10018,1954-06-19,Kazuhide,Peha,F,1987-04-03
10019,1953-01-23,Lillian,Haddadi,M,1999-04-30
10020,1952-12-24,Mayuko,Warwick,M,1991-01-26
10021,1960-02-20,Ramzi,Erde,M,1988-02-10
10022,1952-07-08,Shahaf,Famili,M,1995-08-22
10023,1953-09-29,Bojan,Montemayor,F,1989-12-17
10024,1958-09-05,Suzette,Pettey,F,1997-05-19
10025,1958-10-31,Prasadram,Heyers,M,1987-08-17
10026,1953-04-03,Yongqiao,Berztiss,M,1995-03-20
10027,1962-07-10,Divier,Reistad,F,1989-07-07
10028,1963-11-26,Domenick,Tempesti,M,1991-10-22
10029,1956-12-13,Otmar,Herbst,M,1985-11-20
10030,1958-07-14,Elvis,Demeyer,M,1994-02-17
4、workflow工作流
<workflow>
<sql id="${steptest}" alias="alias1">
<if test="1 == test">
SELECT * FROM employees WHERE gender = 'F' AND birth_date > '1960-01-01'
</if>
<if test="2 == test">
SELECT * FROM employees WHERE gender = 'M' AND birth_date > '${age}'
</if>
<if test="3 == test">
SELECT * FROM employees
<where>
<if test="1 == wheretest">
gender = 'F'
</if>
<if test="2 == wheretest">
AND birth_date > '1960-01-01'
</if>
</where>
</if>
<if test="4 == test">
<choose>
<when test="1 == choosetest">
SELECT * FROM employees WHERE gender = 'F'
</when>
<when test="2 == choosetest">
SELECT * FROM employees WHERE gender = 'M'
</when>
<otherwise>
SELECT * FROM employees WHERE birth_date > '1960-01-01'
</otherwise>
</choose>
</if>
</sql>
<output id="stepOutput" ref="step1" separator="--" type="override"
target="file:///C:\Users\dell\Desktop\magnet-1.0\result" />
</workflow>
职责:主要对数据源进行处理并输出
子标签:sql和output
描述:
sql标签用来对数据源进行SQL操作,sql标签包含两个属性id和alias,属性功能与数据源的id和alias一致。sql标签包含if标签、where标签、choose标签等,具体在后面会逐一介绍。
output标签用来输出处理之后的数据,output标签包含五个属性id、ref、target、type和separator。
- id:标识输出标签
- ref:输出对象的引用
- target:输出地址
- type:输出类型,提供create和override两种,默认是create。create表示创建输出目录,override表示如果输出目录已存在则覆盖。
- separator:分隔符
5、执行Magnet
执行环境:java 8
java -jar magnet-1.0.jar config.xml
输出结果:
10002--1964-06-02--Bezalel--Simmel--F--1985-11-21
10010--1963-06-01--Duangkaew--Piveteau--F--1989-08-24
10012--1960-10-04--Patricio--Bridgland--M--1992-12-18
10013--1963-06-07--Eberhardt--Terkki--M--1985-10-2
10016--1961-05-02--Kazuhito--Cappelletti--M--1995-01-27
10021--1960-02-20--Ramzi--Erde--M--1988-02-10
10027--1962-07-10--Divier--Reistad--F--1989-07-07
10028--1963-11-26--Domenick--Tempesti--M--1991-10-22
码云:https://gitee.com/huanStephen/magnet
技术交流QQ群:1051174317
相关内容: