ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » 数据仓库与数据挖掘 » 如何用C写DataStage Parallel Job 的Routine?

标题: 如何用C写DataStage Parallel Job 的Routine?
离线 cuixuezheng
初级会员


来自 北京
精华贴数 0
个人空间 0
技术积分 262 (7448)
社区积分 1 (43192)
注册日期 2007-2-8
论坛徽章:0
      
      

发表于 2008-5-15 11:42 
如何用C写DataStage Parallel Job 的Routine?

如何写,怎么配置,有什么需要注意的地方?最好有详细的步骤。谢谢!

[ 本帖最后由 cuixuezheng 于 2008-5-15 11:47 编辑 ]


__________________
天行健,君子以自强不息;地势坤,君子以厚德载物
只看该作者    顶部
离线 cuixuezheng
初级会员


来自 北京
精华贴数 0
个人空间 0
技术积分 262 (7448)
社区积分 1 (43192)
注册日期 2007-2-8
论坛徽章:0
      
      

发表于 2008-5-15 11:46 
不好意思,写错了,是Parallel Job 的Routine


__________________
天行健,君子以自强不息;地势坤,君子以厚德载物
只看该作者    顶部
离线 cuixuezheng
初级会员


来自 北京
精华贴数 0
个人空间 0
技术积分 262 (7448)
社区积分 1 (43192)
注册日期 2007-2-8
论坛徽章:0
      
      

发表于 2008-5-16 10:28 
难道没有人用吗?


__________________
天行健,君子以自强不息;地势坤,君子以厚德载物
只看该作者    顶部
离线 cuixuezheng
初级会员


来自 北京
精华贴数 0
个人空间 0
技术积分 262 (7448)
社区积分 1 (43192)
注册日期 2007-2-8
论坛徽章:0
      
      

发表于 2008-5-16 13:51 
http://blogs.ittoolbox.com/dw/so ... e-really-easy-20926 这个是讲如何用C++开发parallel routine的,我试了试,没有成功。各位感兴趣的可以试一下。


__________________
天行健,君子以自强不息;地势坤,君子以厚德载物
只看该作者    顶部
离线 utopian
初级会员



精华贴数 0
个人空间 0
技术积分 15 (67525)
社区积分 0 (513476)
注册日期 2005-7-14
论坛徽章:0
      
      

发表于 2008-5-16 14:03 
我也试了

我也试了,过程十分曲折,编译没有通过,不知道如何描述原因.可能和环境有很大关系,如有人成功了,请把过程贴出来大家分享,谢谢!!!QQ:94424751


__________________
http://www.bootad.cn
只看该作者    顶部
离线 cuixuezheng
初级会员


来自 北京
精华贴数 0
个人空间 0
技术积分 262 (7448)
社区积分 1 (43192)
注册日期 2007-2-8
论坛徽章:0
      
      

发表于 2008-5-20 14:14 
很多人都在问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文件如下:

/*

//

// Example functions to be used as parallel external user functions in the transformer stage

//

// These are examples 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 char TrxFuncUChar()

{

    return (unsigned char)'&';

}

/*

// Case 3: Returning a long

*/

long long TrxFuncLong()

{

    return 119921;

}

/*

// Case 4: Returning a char string

*/

char* TrxFuncCharStr()

{

    return (char*)"TestString";

}

/*

// Case 5: A function taking one of each type of argument

*/

int TrxFuncAllArgs(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 input argument. 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 example transformer external functions

#

# SOLARIS version, intended for demonstration 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.o和libTrxFuncs.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 Designer的Transformer中调用其即可


__________________
天行健,君子以自强不息;地势坤,君子以厚德载物
只看该作者    顶部
离线 33589958



精华贴数 0
个人空间 0
技术积分 14 (72445)
社区积分 0 (1577711)
注册日期 2008-5-6
论坛徽章:0
      
      

发表于 2008-6-6 15:54 
回复 #6 cuixuezheng 的帖子

我的做法与上面有些不一样:
1. 用C写好Function保存为CRoutinTest.cpp, 这个与上面是一致的
2. AIX下,如果已经有C编译器可用一下Shell编译C Function:
CRIPTNAME='cfunc.sh'

usage() {
        cat <<-EOF
        Usage : $SCRIPTNAME <SourceFile.cpp>
        e.g.  : $SCRIPTNAME CRoutinTest.cpp

EOF
}

if [ $# -lt 1 ]
        then
                echo "Invalid arguments:"
                usage
                exit 1
fi

VA_HOME='/usr/vacpp'
TargetPath="../lib/"
TargetName=`echo $1 | cut -d'.' -f1`".o"

$VA_HOME/bin/xlC_r -+ -O -g -c $1 -o $TargetPath$TargetName

这样就会编译产生一个CRoutinTest.o的文件
3-4于楼主的一样


只看该作者    顶部
离线 icbc2005
一般会员



精华贴数 0
个人空间 0
技术积分 143 (12542)
社区积分 5 (15901)
注册日期 2006-3-8
论坛徽章:0
      
      

发表于 2008-6-6 16:08 
回复 #7 33589958 的帖子

两位的过程都是一样,只不过实现的方式有些不一样,#6楼把编译器,参数等写到了makefile里,趋向这种做法!


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问