文档详情

基于Hadoop生态圈的数据仓库实践进阶技术(四).doc

发布:2016-12-29约字共12页下载文档
文本预览下载声明
基于Hadoop生态圈的数据仓库实践 —— 进阶技术(四) 四、角色扮演维度 当一个事实表多次引用一个维度表时会用到角色扮演维度。例如,一个销售订单有一个是订单日期,还有一个交货日期,这时就需要引用日期维度表两次。 本节将说明两类角色扮演维度的实现,分别是表别名和数据库视图。这两种都使用了Hive的功能。表别名是在SQL语句里引用维度表多次,每次引用都赋予维度表一个别名。而数据库视图,则是按照事实表需要引用维度表的次数,建立相同数量的视图。 1. 修改数据库模式 使用下面的脚本修改数据库模式。分别给数据仓库里的事实表sales_order_fact和源数据库中订单销售表sales_order增加request_delivery_date_sk和request_delivery_date列。 [sql] view plain copy 在CODE上查看代码片派生到我的代码片 -- in hive USE dw; -- sales_order_fact表是ORC格式,增加列需要重建数据 ALTER TABLE sales_order_fact RENAME TO sales_order_fact_old; CREATE TABLE sales_order_fact ( order_sk INT comment order surrogate key, customer_sk INT comment customer surrogate key, product_sk INT comment product surrogate key, order_date_sk INT comment date surrogate key, request_delivery_date_sk INT comment request delivery date surrogate key, order_amount DECIMAL(10 , 2 ) comment order amount, order_quantity INT COMMENT order_quantity ) CLUSTERED BY (order_sk) INTO 8 BUCKETS STORED AS ORC TBLPROPERTIES (transactional=true); INSERT INTO sales_order_fact SELECT order_sk, customer_sk, product_sk, order_date_sk, NULL, order_amount, order_quantity FROM sales_order_fact_old; DROP TABLE sales_order_fact_old; USE rds; ALTER TABLE sales_order ADD COLUMNS (request_delivery_date DATE COMMENT request delivery date) ; -- in mysql USE source; ALTER TABLE sales_order ADD request_delivery_date DATE AFTER order_date ; 修改后源数据库模式如下图所示。 Hive不能像MySQL那样指定新增列的位置,它新增的列都是在表的最后。 2. 重建Sqoop作业 使用下面的脚本重建Sqoop作业,增加request_delivery_date列。 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 last_value=`sqoop job --show myjob_incremental_import --meta-connect jdbc:hsqldb:hsql://cdh2:16000/sqoop | grep incremental.last.value | awk {print $3}` sqoop job --delete myjob_incremental_import --meta-connect jdbc:hsqldb:hsql://cdh2:16000/sqoop sqoop job \ --meta-connect jdbc:hsqldb:hsql://cdh2:1
显示全部
相似文档