大數(shù)據(jù)電商項(xiàng)目:離線數(shù)據(jù)處理及指標(biāo)計(jì)算
說明:
????此卷為2021年全國職業(yè)院校技能大賽河南省省賽B+C模塊
????Spark版本為3.1.1,Hadoop版本為3.1.3,Scala版本為2.12,Hive版本為3.1.2。數(shù)據(jù)暫不共享
模塊B:離線數(shù)據(jù)處理
數(shù)據(jù)抽取
編寫Scala工程代碼,將MySQL的shtd_store庫中表CUSTOMER、NATION、PART、PARTSUPP、REGION、SUPPLIER的數(shù)據(jù)全量抽取到Hive的ods庫中對應(yīng)表customer,nation,part,partsupp,region,supplier中,將表ORDERS、LINEITEM的數(shù)據(jù)增量抽取到Hive的ods庫中對應(yīng)表ORDERS,LINEITEM中。
1、 抽取shtd_store庫中CUSTOMER的全量數(shù)據(jù)進(jìn)入Hive的ods庫中表customer。字段排序、類型不變,同時添加靜態(tài)分區(qū),分區(qū)字段類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。并在hive cli執(zhí)行show partitions ods.customer命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中;
2、 抽取shtd_store庫中NATION的全量數(shù)據(jù)進(jìn)入Hive的ods庫中表nation。字段排序、類型不變,同時添加靜態(tài)分區(qū),分區(qū)字段類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。并在hive cli執(zhí)行show partitions ods.nation命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中;
3、 抽取shtd_store庫中PART的全量數(shù)據(jù)進(jìn)入Hive的ods庫中表part。字段排序、類型不變,同時添加靜態(tài)分區(qū),分區(qū)字段類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。并在hive cli執(zhí)行show partitions ods.part命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中;
4、 抽取shtd_store庫中PARTSUPP的全量數(shù)據(jù)進(jìn)入Hive的ods庫中表partsupp。字段排序、類型不變,同時添加靜態(tài)分區(qū),分區(qū)字段類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。并在hive cli執(zhí)行show partitions ods.partsupp命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中;
5、 抽取shtd_store庫中REGION的全量數(shù)據(jù)進(jìn)入Hive的ods庫中表region,字段排序、類型不變,同時添加靜態(tài)分區(qū),分區(qū)字段類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。并在hive cli執(zhí)行show partitions ods.region命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中;
6、 抽取shtd_store庫中SUPPLIER的全量數(shù)據(jù)進(jìn)入Hive的ods庫中表supplier,字段排序、類型不變,同時添加靜態(tài)分區(qū),分區(qū)字段類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。并在hive cli執(zhí)行show partitions ods.supplier命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中;
7、 抽取shtd_store庫中ORDERS的增量數(shù)據(jù)進(jìn)入Hive的ods庫中表orders,要求只取某年某月某日及之后的數(shù)據(jù)(包括某年某月某日),根據(jù)ORDERS表中ORDERKEY作為增量字段(提示:對比MySQL和Hive中的表的ORDERKEY大?。粚⑿略龅臄?shù)據(jù)抽入,字段類型不變,同時添加動態(tài)分區(qū),分區(qū)字段類型為String,且值為ORDERDATE字段的內(nèi)容(ORDERDATE的格式為yyyy-MM-dd,分區(qū)字段格式為yyyyMMdd),。并在hive cli執(zhí)行select count(distinct(etldate)) from? ods.orders命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中;
8、抽取shtd_store庫中LINEITEM的增量數(shù)據(jù)進(jìn)入Hive的ods庫中表lineitem,根據(jù)LINEITEM表中orderkey作為增量字段,只將新增的數(shù)據(jù)抽入,字段類型不變,同時添加靜態(tài)分區(qū),分區(qū)字段類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。并在hive cli執(zhí)行show partitions ods.lineitem命令,將結(jié)果截圖復(fù)制粘貼至對應(yīng)報告中。
任務(wù)二:數(shù)據(jù)清洗
編寫Scala工程代碼,將ods庫中相應(yīng)表數(shù)據(jù)全量抽取到Hive的dwd庫中對應(yīng)表中。表中有涉及到timestamp類型的,均要求按照yyyy-MM-dd HH:mm:ss,不記錄毫秒數(shù),若原數(shù)據(jù)中只有年月日,則在時分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。
1、 將ods庫中customer表數(shù)據(jù)抽取到dwd庫中dim_customer的分區(qū)表,分區(qū)字段為etldate且值與ods庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫操作時間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。在hive cli中按照cust_key順序排序,查詢dim_customer前1條數(shù)據(jù),將結(jié)果內(nèi)容復(fù)制粘貼至對應(yīng)報告中;
2、 將ods庫中part表數(shù)據(jù)抽取到dwd庫中dim_part的分區(qū)表,分區(qū)字段為etldate且值與ods庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫操作時間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。在hive cli中按照part_key順序排序,查詢dim_part前1條數(shù)據(jù),將結(jié)果內(nèi)容復(fù)制粘貼至對應(yīng)報告中;
3、 將ods庫中nation表數(shù)據(jù)抽取到dwd庫中dim_nation的分區(qū)表,分區(qū)字段為etldate且值與ods庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫操作時間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。在hive cli中按照nation_key順序排序,查詢dim_nation前1條數(shù)據(jù),將結(jié)果內(nèi)容復(fù)制粘貼至對應(yīng)報告中;
4、 將ods庫中region表數(shù)據(jù)抽取到dwd庫中dim_region的分區(qū)表,分區(qū)字段為etldate且值與ods庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中 dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫操作時間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。在hive cli中按照region_key順序排序,查詢dim_region表前1條數(shù)據(jù),將結(jié)果內(nèi)容復(fù)制粘貼至對應(yīng)報告中;
5、 將ods庫中orders表數(shù)據(jù)抽取到dwd庫中fact_orders的分區(qū)表,分區(qū)字段為etldate且值與ods庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫操作時間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。在執(zhí)行hive cli執(zhí)行select count(distinct(etldate)) from dwd.fact_orders命令,將結(jié)果內(nèi)容復(fù)制粘貼至對應(yīng)報告中;
6、 待任務(wù)5完成以后,需刪除ods.orders中的分區(qū),僅保留最近的三個分區(qū)。并在hive cli執(zhí)行show partitions ods.orders命令,將結(jié)果截圖粘貼至對應(yīng)報告中;
7、將ods庫中l(wèi)ineitem表數(shù)據(jù)抽取到dwd庫中fact_lineitem的分區(qū)表,分區(qū)字段為etldate且值與ods庫的相對應(yīng)表該值相等,抽取的條件為根據(jù)orderkey和partkey進(jìn)行去重,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫操作時間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。在hive cli執(zhí)行show partitions dwd.fact_lineitem命令,將結(jié)果截圖粘貼至對應(yīng)報告中。

C:指標(biāo)計(jì)算
1、 編寫Scala工程代碼,根據(jù)dwd層表統(tǒng)計(jì)每個地區(qū)、每個國家、每個月下單的數(shù)量和下單的總金額,存入MySQL數(shù)據(jù)庫shtd_store的nationeverymonth表(表結(jié)構(gòu)如下)中,然后在Linux的MySQL命令行中根據(jù)訂單總數(shù)、消費(fèi)總額、國家表主鍵三列均逆序排序的方式,查詢出前5條,將SQL語句與執(zhí)行結(jié)果截圖粘貼至對應(yīng)報告中;

?
2、 編寫Scala工程代碼,根據(jù)dwd層表統(tǒng)計(jì)連續(xù)兩個月下單并且下單金額保持增長的用戶,訂單發(fā)生時間限制為大于等于某年,存入MySQL數(shù)據(jù)庫shtd_store的usercontinueorder表(表結(jié)構(gòu)如下)中。然后在Linux的MySQL命令行中根據(jù)訂單總數(shù)、消費(fèi)總額、客戶主鍵三列均逆序排序的方式,查詢出前5條,將SQL語句與執(zhí)行結(jié)果截圖粘貼至對應(yīng)報告中。

