技术开发 频道

使用Oracle内建功能构建ETL流程



    数据清洗与数据整合

    在典型的数据仓库系统中,事实表中的大部分字段都采用KEY的形式进行存储。在我们的例子中,我们将对LOCATION列进行LOOKUP,满足地区标准的数据被视为正确数据并附以标准键值;如果出现在标准表中不存在的纪录,我们将认为其为脏数据。脏数据将被另行处理。我们的标准表为LOC_STD,正确记录的Staging表为STG_PRODUCT,异常记录的Staging表为STG_EXCEP。建表语句与测试数据见附录A。在数据文件中,ID为6的产品没有对应的Location,该记录将被视为异常记录。通过一个简单的存储过程,我们将STENNY_EXT_PRODUCT与LOC_STD表进行连接,正确的记录与异常记录将被写入对应的Staging表中。
--proc_txn_product CREATE OR REPLACE PROCEDURE proc_txn_product AS BEGIN insert into stg_product select product_id,product_name,loc_id from stenny_ext_product,loc_std where loc_std.loc_name=stenny_ext_product.location; insert into stg_excep select * from stenny_ext_product where product_id not in (select product_ id from stg_product); commit; END proc_txn_product
    执行存储过程可以得到如下的结果:
SQL> exec proc_txn_product; PL/SQL procedure successfully completed. SQL> select * from stg_product; PRODUCT_ID PRODUCT_NAME LOC_ID ---------- -------------------- ---------- 1 Bicycle 1 2 Camps 2 3 Wearings 3 4 Gloves 3 5 Food 4 SQL> select * from stg_excep; PRODUCT_ID PRODUCT_NAME LOCATION ---------- -------------------- ------------------------- 6 Shoes NULLEND proc_txn_product
0
相关文章