1. 程式人生 > 實用技巧 >大資料實戰(七十八):電商數倉(六十二)數倉之業務數倉搭建(五)ADS層(需求:GMV成交總額)

大資料實戰(七十八):電商數倉(六十二)數倉之業務數倉搭建(五)ADS層(需求:GMV成交總額)

1建表語句

hive (gmall)>
drop table if exists ads_gmv_sum_day;
create external table ads_gmv_sum_day(
 `dt` string COMMENT '統計日期',
 `gmv_count`  bigint COMMENT '當日gmv訂單個數',
`gmv_amount`  decimal(16,2) COMMENT '當日gmv訂單總金額',
 `gmv_payment`  decimal(16,2) COMMENT '當日支付金額'
) COMMENT 'GMV'
row format delimited fields terminated by 
'\t' location '/warehouse/gmall/ads/ads_gmv_sum_day/' ;

2資料匯入指令碼

1)在/root/bin目錄下建立指令碼ads_db_gmv.sh

[root@hadoop102 bin]$ vim ads_db_gmv.sh

指令碼中填寫如下內容

#!/bin/bash

# 定義變數方便修改
APP=gmall

# 如果是輸入的日期按照取輸入日期;如果沒輸入日期取當前時間的前一天
if [ -n "$1" ] ;then
    do_date=$1
else 
    do_date=`date -d "-1 day" +%F`
fi 

sql
=" insert into table "$APP".ads_gmv_sum_day select '$do_date' dt, sum(order_count) gmv_count, sum(order_amount) gmv_amount, sum(payment_amount) payment_amount from "$APP".dws_user_action where dt ='$do_date' group by dt; " beeline -u "jdbc:hive2://hadoop102:10000/" -n hive -e "$sql"

2)增加指令碼執行許可權

[root@hadoop102 bin]$ chmod 777 ads_db_gmv.sh

3)執行指令碼

[root@hadoop102 bin]$ ads_db_gmv.sh 2019-02-10

3 資料出指令碼

1)在MySQL中建立ads_gmv_sum_day表

DROP TABLE IF EXISTS ads_gmv_sum_day;
CREATE TABLE ads_gmv_sum_day(
  `dt` varchar(200) DEFAULT NULL COMMENT '統計日期',
  `gmv_count` bigint(20) DEFAULT NULL COMMENT '當日gmv訂單個數',
  `gmv_amount` decimal(16, 2) DEFAULT NULL COMMENT '當日gmv訂單總金額',
  `gmv_payment` decimal(16, 2) DEFAULT NULL COMMENT '當日支付金額'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '每日活躍使用者數量' ROW_FORMAT = Dynamic;

2)在/root/bin目錄下建立指令碼sqoop_export.sh

[root@hadoop102 bin]$ vim sqoop_export.sh

指令碼中填寫如下內容

#!/bin/bash

export HADOOP_USER_NAME=hive

db_name=gmall

export_data() {
sqoop export \
--connect "jdbc:mysql://hadoop102:3306/${db_name}?useUnicode=true&characterEncoding=utf-8"  \
--username root \
--password Atguigu.123456 \
--table $1 \
--num-mappers 1 \
--export-dir /warehouse/$db_name/ads/$1 \
--input-fields-terminated-by "\t" \
--update-mode allowinsert \
--update-key $2 \
--input-null-string '\\N'    \
--input-null-non-string '\\N'
}

case $1 in
  "ads_gmv_sum_day")
     export_data "ads_gmv_sum_day" "dt"
;;
   "all")
     export_data "ads_gmv_sum_day" "dt"
;;
esac

3)增加指令碼執行許可權

[root@hadoop102 bin]$ chmod 777 sqoop_export.sh

4)執行指令碼匯入資料

[root@hadoop102 bin]$ sqoop_export.sh all

5)在SQLyog檢視匯出資料

select * from ads_gmv_sum_day