數據倉庫 用戶行為數倉 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。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM