數據中臺從Magnet開始(2)之快速入門

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


相關內容:

數據中臺從Magnet開始(1)之數據處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章