168大数据

标题: 数据仓库分层 [打印本页]

作者: 168主编    时间: 2019-1-22 21:34
标题: 数据仓库分层
本帖最后由 168主编 于 2019-1-22 21:41 编辑

1、介绍
数据仓库更多代表的是一种对数据的管理和使用的方式,它是一整套包括了etl、调度、建模在内的完整的理论体系。现在所谓的大数据更多的是一种数据量级的增大和工具的上的更新。 两者并无冲突,相反,而是一种更好的结合。数据仓库在构建过程中通常都需要进行分层处理。业务不同,分层的技术处理手段也不同。
2、为什么要分层
分层的主要原因是在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:
3、怎样分层
理论上数据分为三个层,数据运营层、数据仓库层和数据产品层。
4、Sqoop数据导入
4.1 常规导入
以追加方式导入数据,指定map并行度是1,字段分隔符为'001'。
[AppleScript] 纯文本查看 复制代码
sqoop import 
    --append
    --connect $CONNECTURL
    --username $ORACLENAME
    --password $ORACLEPASSWORD
    --target-dir $hdfsPath  
    --num-mappers 1         #使用1个mapper
    --table $oralceTableName
    --columns $columns
    --fields-terminated-by '\001'
4.2 并行导入
如果指定--m为1的话,使用的是1个map进行导入,不能发挥集群的并行计算能力。可以通过增加数量达到同时启动多个mapper个数实现并行导入的目的。
[AppleScript] 纯文本查看 复制代码
sqoop import 
    --append
    --connect $CONNECTURL
    --username $ORACLENAME
    --password $ORACLEPASSWORD
    --target-dir $hdfsPath  
    --num-mappers 4         #使用4个mapper
    --table $oralceTableName
    --columns $columns
    --fields-terminated-by '\001'
    --where "data_desc='2011-02-26'"

注意,并行导入时sqoop会先在主键字段上执行max和min的操作,将所有记录切割成指定的份数,然后再按照每个切片的数据范围进行同时导入。过程大致如下:
[AppleScript] 纯文本查看 复制代码
--查询主键的极值
select max(id) as max, select min(id) as min from table [where 如果指定了where子句];
--按照极值确定各自的处理范围
select * from table where 0 <= id < 250;
select * from table where 250 <= id < 500;
select * from table where 500 <= id < 750;
select * from table where 750 <= id < 1000;
如果数据库没有主键,则需要指定一个能够切割的字段进行处理,并且该字段值具有比较明显的切割线,即极值不能相等,否则无法进行切割。如下所示:
[AppleScript] 纯文本查看 复制代码
sqoop import 
    --append
    --connect $CONNECTURL
    --username $ORACLENAME
    --password $ORACLEPASSWORD
    --target-dir $hdfsPath  
    --num-mappers 4         #使用4个mapper
    --table $oralceTableName
    --columns $columns
    --fields-terminated-by '\001'
    --split-by clientip
    --where "data_desc='2011-02-26'"
4.3 增量导入
增量导入有两种方式,按照指定的值和时间戳。本质上就是按照字段类型是整型还是时间戳类型进行导入。只导入比指定的值还大的记录数。增量导入使用于字段值是自增类型或是时间戳自增类型。
[AppleScript] 纯文本查看 复制代码
sqoop import 
    --append
    --connect $CONNECTURL
    --username $ORACLENAME
    --password $ORACLEPASSWORD
    --target-dir $hdfsPath  
    --num-mappers 4         #使用4个mapper
    --table $oralceTableName
    --columns $columns
    --fields-terminated-by '\001'
    --incremental append    #增量数据
    --check-column num_iid  #检查列
    --last-value 0          #最后的值

按时间戳导入:
[AppleScript] 纯文本查看 复制代码
sqoop import 
    --append
    --connect $CONNECTURL
    --username $ORACLENAME
    --password $ORACLEPASSWORD
    --target-dir $hdfsPath  
    --num-mappers 4         #使用4个mapper
    --table $oralceTableName
    --columns $columns
    --fields-terminated-by '\001'
    --incremental lastmodified  #
    --check-column created      #
    --last-value '2012-02-01 11:0:00'





欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2