zoukankan      html  css  js  c++  java
  • 数据仓库 用户行为数仓 ODS原始数据层操作示例

    ODS(Operational Data Store):原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。

    在ODS一般需要2个重要的步骤,示例如下:

    1.建立ODS层的Hive表。

    drop table if exists ods_start_log;
    CREATE EXTERNAL TABLE ods_start_log (`line` string)
    PARTITIONED BY (`dt` string)
    STORED AS
      INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
      OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION '/warehouse/gmall/ods/ods_start_log';

    重要说明:

    ①ODS层存放的是原始数据,因此只需要一个字段就行。

    ②ODS层的数据来源于HDFS,里面存储的文件带有压缩,因此需要指明相应的压缩方式。Hive的LZO压缩参考https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LZO

    ③在多人操作一张Hive表时,最好建立外部表,防止删表时将其中的数据也删掉了。

    ④几乎所有数仓的表,都是分区表,每天一个区。

    ⑤LOCATION只是指明此项目的数据放在那里统一管理,与内外部表没有关系。

    2 编写将数据导入上述表中的脚本。

    #!/bin/bash
    
    APP=gmall
    hive=/opt/module/hive/bin/hive
    
    if [ -n $1 ] ;then
            do_date=$1
    else
            do_date=date -d "-1 day" +%F
    fi
    
    sql="
    load data inpath '/origin_data/gmall/log/topic_start/$do_date' into table "$APP".ods_start_log partition(dt='$do_date');
    load data inpath '/origin_data/gmall/log/topic_event/$do_date' into table "$APP".ods_event_log partition(dt='$do_date');
    "
    
    $hive -e "$sql"

    重要说明:

    ①-n是为了判断有没有这个参数

    ②数仓一般需要导入前一天的数据,因此在日期处理上需要减一天,同时进行格式化。

    ③表名前需要加上库名,否则会去默认的default库里找。

    ④hive -e可以直接执行sql。

  • 相关阅读:
    arm-linux-gcc4.4.3编译busybox-1.25.0
    arm-linux-gcc4.4.3编译s3c2410平台linux内核
    Ubuntu 16.04上编译SkyEye的测试程序
    Ubuntu16.04上安装arm-linux-gcc4.4.3
    Ubuntu下安装deb包命令
    基环树DP
    整理
    无穷的远方,无数的人们,都和我有关
    死亡之前,我是生活本身
    我是sb
  • 原文地址:https://www.cnblogs.com/noyouth/p/13191580.html
Copyright © 2011-2022 走看看