美文网首页
Datax 自定义函数 dx_groovy

Datax 自定义函数 dx_groovy

作者: Skye_kh | 来源:发表于2017-09-16 10:01 被阅读391次

DataX 是阿里云开源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、MaxCompute(原ODPS)、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

Datax 的数据转换支持 UserDefined Function

官方的使用说明如下:

dx_groovy

  • 参数。
    • 第一个参数: groovy code
    • 第二个参数(列表或者为空):extraPackage
  • 备注:
    • dx_groovy只能调用一次。不能多次调用。
    • groovy code中支持java.lang, java.util的包,可直接引用的对象有record,以及element下的各种column(BoolColumn.class,BytesColumn.class,DateColumn.class,DoubleColumn.class,LongColumn.class,StringColumn.class)。不支持其他包,如果用户有需要用到其他包,可设置extraPackage,注意extraPackage不支持第三方jar包。
    • groovy code中,返回更新过的Record(比如record.setColumn(columnIndex, new StringColumn(newValue));),或者null。返回null表示过滤此行。
    • 用户可以直接调用静态的Util方式(GroovyTransformerStaticUtil),目前GroovyTransformerStaticUtil的方法列表 (按需补充):
  • 举例:
groovy 实现的subStr:
        String code = "Column column = record.getColumn(1);\n" +
                " String oriValue = column.asString();\n" +
                " String newValue = oriValue.substring(0, 3);\n" +
                " record.setColumn(1, new StringColumn(newValue));\n" +
                " return record;";
        dx_groovy(record);
groovy 实现的Replace
String code2 = "Column column = record.getColumn(1);\n" +
                " String oriValue = column.asString();\n" +
                " String newValue = \"****\" + oriValue.substring(3, oriValue.length());\n" +
                " record.setColumn(1, new StringColumn(newValue));\n" +
                " return record;";
groovy 实现的Pad
String code3 = "Column column = record.getColumn(1);\n" +
                " String oriValue = column.asString();\n" +
                " String padString = \"12345\";\n" +
                " String finalPad = \"\";\n" +
                " int NeedLength = 8 - oriValue.length();\n" +
                "        while (NeedLength > 0) {\n" +
                "\n" +
                "            if (NeedLength >= padString.length()) {\n" +
                "                finalPad += padString;\n" +
                "                NeedLength -= padString.length();\n" +
                "            } else {\n" +
                "                finalPad += padString.substring(0, NeedLength);\n" +
                "                NeedLength = 0;\n" +
                "            }\n" +
                "        }\n" +
                " String newValue= finalPad + oriValue;\n" +
                " record.setColumn(1, new StringColumn(newValue));\n" +
                " return record;";
  • 以下是我自己实现的字符串替换 dx_groovy 函数
    {
    "job": {
    "content": [
    {
    "reader": {
    "name": "mysqlreader",
    "parameter": {
    "column": ["user_role_id","username","ROLE"],
    "connection": [
    {
    "jdbcUrl": ["jdbc:mysql://10.1.18.155:3306/saiku_test"],
    "table": ["user_roles_copy"]
    }
    ],
    "password": "123456",
    "username": "root",
    "where": ""
    }
    },
    "writer": {
    "name": "mysqlwriter",
    "parameter": {
    "column": ["user_role_id","username","ROLE"],
    "connection": [
    {
    "jdbcUrl": "jdbc:mysql://10.1.18.155:3306/saiku_test",
    "table": ["user_roles_trans"]
    }
    ],
    "password": "123456",
    "preSql": [],
    "session": [],
    "username": "root",
    "writeMode": "insert"
    }
    },
    "transformer": [
    {
    "name": "dx_filter",
    "parameter":
    {
    "columnIndex":1,
    "paras":["=","null"]
    }
    },{
    "name": "dx_groovy",
    "parameter":
    {
    "code": "Column column = record.getColumn(2);\nString oriValue = column.asString();\nString sourceString = "ROLE_ADMIN";\nString changeString = "replaceTest";\nif (oriValue.equals(sourceString)){record.setColumn(2, new StringColumn(changeString));\nreturn record;}\nreturn record;",
    "extraPackage":[]
    }
    }
    ]
    }
    ],
    "setting": {
    "speed": {
    "channel": "1"
    }
    }
    }
    }

相关文章

  • Datax 自定义函数 dx_groovy

    DataX 是阿里云开源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive...

  • 如何用DataX自定义KuduWriter插件

    如何用DataX自定义KuduWriter之前,先了解一下什么是DataX,它能做什么事 DataX DataX ...

  • DataX Vs Sqoop

    DataX https://github.com/alibaba/DataX/wiki/DataX-all-dat...

  • mysql-自定义函数

    创建自定义无参数函数 调用自定义函数 创建有参数的自定义函数 调用有参数的自定义函数 创建具有复合结构的自定义函数...

  • 9.MySQL自定义函数

    自定义函数 自定义函数的两个必要条件 参数 返回值 创建自定义函数 函数体 例子 带有参数的自定义函数 删除函数 ...

  • DataX在数据迁移中的应用

    简介: DataX在数据迁移中的应用 1. DataX定义 首先简单介绍下datax是什么。DataX是阿里巴巴集...

  • 数据迁移工具DataX入门

    一、DataX是什么 DataX[https://github.com/alibaba/DataX]是阿里巴巴开源...

  • DataX Web使用体验入门

    一、DataX Web是什么 DataX web是在DataX的基础上开发的分布式的数据同步工具,方便DataX的...

  • trace函数、自定义函数

    trace函数:修改部分可见函数的源代码。自定义函数:函数名<-function(){ } ①自定义函数 ②匿名函...

  • DataX 增量同步数据

    全量数据导出请查看DataX mongodb导出数据到mysql Datax UDF手册 datax.py mon...

网友评论

      本文标题:Datax 自定义函数 dx_groovy

      本文链接:https://www.haomeiwen.com/subject/nfsysxtx.html