打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何用C开发DataStage Parallel Routine

    很多人都在问DataStage Parallel Routine如何写,可是几乎没有人回答,网上也没有找到。倒是从网上找到一个用C++开发Parallel Routine的 ,只是试了试没有成功。URL如下:http://blogs.ittoolbox.com/dw/soa/archives/datastage-parallel-routines-made-really-easy-20926

我用DataStage自带的示例做了一下,server端为AIX环境,供大家参考

1、用C开发Parallel Routine,需要用到 Makefile去编译C文件

       创建C文件和Makefile文件,

C文件如下:

/*

//

// Examplefunctions to be used as parallel external user functions in the transformerstage

//

// These areexamples for Solaris, and are intended for demonstration purposes only.

//

*/

#include"string.h"

/*

// Case 1:Returning an int value

*/

int TrxFuncInt()

{

    return -1034;

}

/*

// Case 2:Returning an unsigned char

*/

unsigned charTrxFuncUChar()

{

    return (unsigned char)‘&‘;

}

/*

// Case 3:Returning a long

*/

long longTrxFuncLong()

{

    return 119921;

}

/*

// Case 4:Returning a char string

*/

char*TrxFuncCharStr()

{

    return (char*)"TestString";

}

/*

// Case 5: Afunction taking one of each type of argument

*/

intTrxFuncAllArgs(signed char arg1, unsigned char arg2,

                    short arg3,       unsigned short arg4,

                    int arg5,         unsigned int arg6,

                    long long arg7,   unsigned long long arg8,

                    float arg9,

                    double arg10,

                    char* arg11)

{

    int retval;

    /*

    // this just checks the value of each inputargument. If all the values are

    // as expected then it returns 0, otherwise-1

    */

    if (arg1 != ‘&‘) {

        retval = -1;

    } else if (arg2 != (unsigned char)‘&‘){

        retval = -1;

    } else if (arg3 != -3) {

        retval = -1;

    } else if (arg4 != 4) {

        retval = -1;

    } else if (arg5 != 5555) {

        retval = -1;

    } else if (arg6 != 6665) {

        retval = -1;

    } else if (arg7 != -77777) {

        retval = -1;

    } else if (arg8 != 87654) {

        retval = -1;

    } else if ((arg9 <= 2.2) || (arg9 >=2.4)) {

        retval = -1;

    } else if (arg10 != 4.3) {

        retval = -1;

    } else if (strcmp(arg11,(char*)"TestString") != 0) {

        retval = -1;

    } else {

        retval = 0;

    }

    return retval;

}

 

Makefile文件内容如下:

#=====================================================================

# Example Makefile to build the exampletransformer external functions

#

# SOLARIS version, intended fordemonstration purposes only.

#

#=====================================================================

TARGETLIB   =libTrxFuncs.so

CODESRC        = TrxFuncs.c

TARGETOBJ  =TrxFuncs.o

CC         = g++

CCOPTIONS  = -O -fPIC

LIBCC      = $(CC)

LDOPTIONS  = -nostartfiles -Wl,-Bshareable,-Bsymbolic,--allow-shlib-undefined

.SUFFIXES: .c .o

#---------------------------------------------------------------------

# Rules

# ---------------------------------------------------------------------

all: $(TARGETLIB)

$(TARGETLIB):     $(TARGETOBJ)

       $(LIBCC)$(LDOPTIONS) $(TARGETOBJ) -o $(TARGETLIB)

$(TARGETOBJ): $(CODESRC)

       $(CC)$(CCOPTIONS) -c $(CODESRC) -o $(TARGETOBJ)

clean:

       @rm-f $(TARGETOBJ) $(TARGETLIB)

#---------------------------------------------------------------------

# End of makefile

#---------------------------------------------------------------------

2、 将这两个文件放在DataStage 服务器下,然后执行:make;这样会生成TrxFuncs.olibTrxFuncs.so文件,

3、 DataStage Manager下创建一个Parallel Routine
        Routine name
Routine的名字,External subroutine name则写.c文件中的function名称。如果在Object type中选择Library,    则在Library path中写libTrxFuncs.so文件;如果是选择Object,则在Library path中写TrxFuncs.o文件。然后保存退出

4、然后在DataStage DesignerTransformer中调用其即可


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux2.6 字符设备驱动程序
在 Excel 2007 中开发加载项 (XLL)
(转)华为c++编码规范,认为比google的好一点
串口通信+红外通信 通过串口发送红外遥控器的解码值到PC
linux内核中串口驱动注册过程(tty驱动)[转]
C语言在8051单片机上的扩展(interrupt、using关键字的用法)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服