数据中台从Magnet开始(2)之快速入门

4 篇文章 0 订阅
3 篇文章 0 订阅

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)之数据处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值