• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    ETL的過程原理和數據倉庫建設

    發布: 2008-6-18 17:04 | 作者: 奧勒菲 | 來源: 賽迪網 | 查看: 120次 | 進入軟件測試論壇討論

    領測軟件測試網 1.引言

      數據倉庫建設中的ETL(Extract, Transform, Load)是數據抽取、轉換和裝載到模型的過程,整個過程基本是通過控制用SQL語句編寫的存儲過程和函數的方式來實現對數據的直接操作,SQL語句的效率將直接影響到數據倉庫后臺的性能。

      目前,國內的大中型企業基本都具有四年以上計算機信息系統應用經驗,積累了大量可分析的業務數據,這些信息系統中的數據需要通過搭建數據倉庫平臺才能得到科學的分析,這也是近幾年數據倉庫系統建設成為IT領域熱門話題的原因。

      2.優化的思路分析

      數據倉庫ETL過程的主要特點是:面對海量的數據進行抽;分時段對大批量數據進行刪除、更新和插入操作;面對異常的數據進行規則化的清洗;大量的分析模型重算工作;有特定的過程處理時間規律性,一般整個ETL過程需要在每天的零點開始到6點之前完成。所以,針對ETL過程的優化主要是結合數據倉庫自身的特點,抓住需要優化的主要方面,針對不同的情況從如何采用高效的SQL入手來進行。

      優化的實例分析

      目前數據倉庫建設中的后臺數據庫大部分采用Oracle,以下的SQL采用Oracle的語法來說明,所有的測試在Oracle9i環境中通過,但其優化的方法和原理同樣適合除Oracle之外的其他數據庫。

      3.1索引的正確使用

      在海量數據表中,基本每個表都有一個或多個的索引來保證高效的查詢,在ETL過程中的索引需要遵循以下使用原則:

      (1) 當插入的數據為數據表中的記錄數量10%以上時, 首先需要刪除該表的索引來提高數據的插入效率,當數據全部插入后再建立索引。

      (2) 避免在索引列上使用函數或計算,在WHERE子句中,如果索引列是函數的一部分,優化器將不使用索引而使用全表掃描。舉例:

      低效: SELECT * ROM DEPT WHERE SAL * 12 > 25000;

      高效: SELECT * FROM DEPT WHERE SAL > 25000/12;

      (3) 避免在索引列上使用NOT和”!=” , 索引只能告訴什么存在于表中,而不能告訴什么不存在于表中,當數據庫遇到NOT和”!=”時,就會停止使用索引轉而執行全表掃描。

      (4) 索引列上用>=替代>

      高效: SELECT * FROM EMP WHERE DEPTNO >=4

      低效: SELECT * FROM EMP WHERE DEPTNO >3

      兩者的區別在于,前者DBMS將直接跳到第一個DEPT等于4的記錄而后者將首先定位到DEPTNO=3的記錄并且向前掃描到第一個DEPT大于3的記錄。

      (5) 函數的列啟用索引方法,如果一定要對使用函數的列啟用索引,Oracle9i以上版本新的功能:基于函數的索引(Function-Based Index)是一個較好的方案,但該類型索引的缺點是只能針對某個函數來建立和使用該函數。

      CREATE INDEX EMP_I ON EMP (UPPER( ENAME));
      SELECT * FROM EMP WHERE UPPER(ENAME) = ‘BLACKSNAIL’;

      3.2 游標的正確使用

      當在海量數據表中進行數據的刪除、更新和插入操作時,用游標處理的效率是最慢的方式,但它在ETL過程中的使用又必不可少,而且使用有著及其重要的地位,所以游標的正確使用尤為重要。

      對數據倉庫維表的數據進行維護時,因為需要保證維表ID的一致性,所以采用游標的是數據維護完整性的最好方式。由于它的效率低,如果按照普通的方式將無法處理大數據量的維表數據維護(一般是指10萬條記錄以上的維表),以下是處理這種情況的有效方式:

      (1) 在數據抽取的源表中使用時間戳,這樣每天的維表數據維護只針對更新日期為最新時間的數據來進行,大大減少需要維護的數據記錄數。

      (2) 在INSERT和UPDATE維表時都加上一個條件來過濾維表中已經存在的記錄,實例為:

      INSERT INTO DIM_CUSTOMER SELECT * FROM ODS_CUSTOMER WHERE ODS_CUSTOMER.CODE NOT EXISTS (DIM_CUSTOMER.CODE)

      (3) 使用顯式的游標(CURSORs) ,因為使用隱式的游標將會執行兩次操作,第一次檢索記錄,第二次檢查TOO MANY ROWS 這個EXCEPTION,而顯式游標不執行第二次操作。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: 建設 數據倉庫 原理 ETL

    21/212>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>