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
相關內容: