<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    melody

    成為最優(yōu)秀的自己
    數(shù)據(jù)加載中……
    datastage http://www.chinabi.net/blog/user1/402/archives/2005/350.html#

    Datastage的使用心得及unix應(yīng)用

     

    DatastageAscential公司出品的著名第三方ETL工具。它的主要特點(diǎn)有:

    1.可視化操作截面,避免了大量的手工code

    2.第三方工具,善于處理復(fù)雜的數(shù)據(jù)源

    3.可監(jiān)控性好,能夠快速發(fā)現(xiàn)ETL中的問題并解決

     

     

     

    對(duì)于Datastage的初學(xué)者來說,通過學(xué)習(xí)官方培訓(xùn)資料(網(wǎng)上到處都有的當(dāng)了),可以快速的入門,畢竟Datastage是一個(gè)可視化的工具,沒有太深澀難懂的內(nèi)容。但在真正運(yùn)用中,就可能碰到各種各樣的問題。下面就說一說我在使用中曾經(jīng)困惑過的一些問題:

    1Job的粒度。一套ETL過程中,含有多個(gè)步驟,在設(shè)計(jì)過程中,到底是粗化一些,用少而復(fù)雜的job實(shí)現(xiàn),還是細(xì)化一些,用多而簡(jiǎn)單的job實(shí)現(xiàn)更好呢?我個(gè)人認(rèn)為,比較細(xì)的粒度更有利于程序的開發(fā)。在開發(fā)初期,表面看來細(xì)化的job比較繁瑣,但在項(xiàng)目后期的測(cè)試階段,細(xì)化的job可以更準(zhǔn)確的定位錯(cuò)誤并易于修改。

    2.并行和串行。當(dāng)?shù)搅碎_發(fā)后期,我們準(zhǔn)備把多個(gè)job連接起來,我們就會(huì)發(fā)現(xiàn),能否將多個(gè)job并行成為ETL效率的關(guān)鍵,而這個(gè)因素在設(shè)計(jì)初期往往被忽略。ETL中可能會(huì)涉及多個(gè)數(shù)據(jù)源的多個(gè)表,而多個(gè)job也可能會(huì)形成對(duì)某個(gè)數(shù)據(jù)源以及其中的某個(gè)表的爭(zhēng)用。當(dāng)數(shù)據(jù)源爭(zhēng)用時(shí),會(huì)影響ETL的執(zhí)行效率。當(dāng)表爭(zhēng)用無法解決的時(shí)候,就只能使用串行。而一個(gè)好的結(jié)構(gòu)流程設(shè)計(jì),可以極大的減少這種爭(zhēng)用,從而提高ETL的效率。

    3.要將Datastage與外部code相結(jié)合。Datastage并不是獨(dú)立運(yùn)行的開發(fā)工具,它需要外部控制程序?yàn)檩d體,才可以進(jìn)行良好的客戶操作。而Datastage也不是萬能的,簡(jiǎn)單的說,它只是sql語言的一個(gè)可視化載體。因此,有一些功能,并不一定要在Datastage中實(shí)現(xiàn),而應(yīng)該放到外部程序中,以sql code的形式完成,以保證整個(gè)程序的穩(wěn)定性,安全性。

     

     

    上面是一些大方向的問題,在實(shí)際中會(huì)有很多煩瑣的小問題,我也盡量的列舉一些:

    1.字符集:outputinput中的字符集都設(shè)置為none,是一個(gè)不錯(cuò)的選擇。至少可以保證程序運(yùn)行不會(huì)因?yàn)閬y碼abort

    2.文本中的列分隔符無法設(shè)置為三位,從理論上講,只有三位分割符才可以保證程序不會(huì)將亂碼辨認(rèn)為分隔符,這是Datastage的一個(gè)缺陷。

    3.在使用自定義sql前,需要使用非自定義形式手工配置好所需要的表,然后再切回自定義格式,如果直接寫自定義sql,將導(dǎo)致Datastage無法辨別表名,從而導(dǎo)致錯(cuò)誤,這應(yīng)該是一個(gè)bug

    4.保持配置一個(gè)inputoutput,就view data一下的習(xí)慣,不要等到run時(shí)再回頭找error.

    5Input中盡量不要使用insert or update之類的選項(xiàng),它和insert only的差別是巨大的。使用insert or update等選項(xiàng),相當(dāng)于使用游標(biāo),逐條進(jìn)行對(duì)比,每insert一條,都要先做一次全表掃描,其速度是可想而知的。如果必須要實(shí)現(xiàn)這種功能,應(yīng)使用其他方法,如先delete目標(biāo)表中所有與源表重復(fù)的記錄,然后再從源表中insert數(shù)據(jù).

    6Date型數(shù)據(jù)是比較麻煩的,因?yàn)?/span>Datastage中的日期格式為timestamp,當(dāng)然你也可以把它的日期格式更改為date型,但經(jīng)常會(huì)出現(xiàn)錯(cuò)誤。對(duì)于oracle數(shù)據(jù)庫源表和目標(biāo)表,不需要對(duì)date型數(shù)據(jù)做任何轉(zhuǎn)換,直接使用默認(rèn)即可,但對(duì)于informix等一些數(shù)據(jù)庫,則需要使用oconviconv函數(shù)進(jìn)行轉(zhuǎn)換,并在output中相應(yīng)的修改output sql中的日期格式。具體用法可以去網(wǎng)上或查datastage幫助。

    7.只要你保證inputoutput時(shí)數(shù)據(jù)類型和長度不會(huì)有問題,在兩者之間的這一段過程中,Datastage中的數(shù)據(jù)類型和長度是可以隨意更改的,也可以隨意增加自定義列。

    8.字符串中的半角空格需要用trimb,而不是trim函數(shù),但這點(diǎn)往往被忽略。其他的情況還可能有半角中文等,所以字符串,長度,字符集,這幾者之間經(jīng)常會(huì)導(dǎo)致Datastage產(chǎn)生錯(cuò)誤,所以應(yīng)盡量保證insert前的字符串長度要小于insert后的字符串長度,而你看到的insert前的字符串長度并不一定就是它在Datastage中真正的長度,所以使用trimb函數(shù)在input sql中做一下限制,才是最穩(wěn)妥的方法。

     

     

    最后說一個(gè)datastageunix中應(yīng)用的實(shí)例,以供大家參考:

    一個(gè)完整的ETL,其步驟是:

    1.業(yè)務(wù)用戶接口(java,jsp等友好界面)觸發(fā)

    2Shell運(yùn)行

    3.啟動(dòng)Controljob運(yùn)行

    4Controljob啟動(dòng)job

    5.監(jiān)控job狀態(tài)的Controljob運(yùn)行(循環(huán)運(yùn)行,直到所有job結(jié)束)

    6.返回job執(zhí)行情況到shell

    7Shell返回執(zhí)行情況到業(yè)務(wù)接口

    8.用戶得到結(jié)果

     

    可以看出,這里包括了幾個(gè)主要元素:業(yè)務(wù)接口,shell,controljob,getstatus controljob,job

    其中只給大家列出controljob,getstatus controljob,以及shell中的controljob調(diào)度命令,其他的部分就不再詳述了

     

    一、普通的control job

    1.帶斜線、下劃線并加粗 的部分需要考慮是否是并行的,如果是并行的就不需要這句

    2.原始層需要加進(jìn)藍(lán)色的行

    3.紅色的表示job的名字,用來替換job的名字

    [b1]該行對(duì)應(yīng)原始層的job當(dāng)需要從文本load數(shù)據(jù)時(shí),需要在這里調(diào)用相應(yīng)的sh 

    * Setup DXrtInc, run it, wait for it to finish, and test for success

          hJobDXrtInc1 = DSAttachJob("DXrtInc", DSJ.ERRFATAL)

          If NOT(hJobDXrtInc1) Then

             Call DSLogFatal("Job Attach Failed: DXrtInc", "JobControl")

             Abort

          End

         

          Call DSExecute("UNIX", "/essbase/script/dwcorp/system/t[b1] .sh", Output, SystemReturnCode)

        

        *If FAIL Then RESET

          Status = DSGetJobInfo(hJobDXrtInc1, DSJ.JOBSTATUS)                                                                   

          If Status = DSJS.RUNFAILED Then

             ErrCode = DSRunJob(hJobDXrtInc1, DS

    posted on 2008-04-07 14:50 meilody 閱讀(626) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 8x网站免费入口在线观看| 一级中文字幕乱码免费| 日韩内射激情视频在线播放免费 | 久久久久亚洲AV无码专区桃色| 99亚洲乱人伦aⅴ精品| 成人av免费电影| 亚洲av永久无码精品秋霞电影秋 | 爱情岛论坛亚洲品质自拍视频网站| 午夜老司机免费视频| 在线a亚洲老鸭窝天堂av高清| 毛片a级毛片免费播放下载| 国产v亚洲v天堂a无| 女人张开腿等男人桶免费视频| 亚洲AV无码久久久久网站蜜桃| 成人免费视频88| 特级毛片免费观看视频| 精品国产亚洲男女在线线电影 | 青青久久精品国产免费看| 亚洲性久久久影院| a毛片免费全部播放完整成| 亚洲综合一区二区国产精品| 亚洲免费视频观看| 亚洲中文字幕AV每天更新| www.亚洲色图.com| 国产精品综合专区中文字幕免费播放| 亚洲色爱图小说专区| 51视频精品全部免费最新| 亚洲欧美国产日韩av野草社区| 免费女人18毛片a级毛片视频| 国产免费区在线观看十分钟 | 国产精品小视频免费无限app| 亚洲av丰满熟妇在线播放| 91麻豆最新在线人成免费观看| 亚洲av无码专区国产不乱码 | 91大神免费观看| 亚洲另类自拍丝袜第五页| 一本久久a久久精品亚洲| 黄+色+性+人免费| 一级毛片大全免费播放下载| 中文字幕在线观看亚洲| 国产在线98福利播放视频免费|