目錄
?文章來源地址http://www.zghlxwxcb.cn/news/detail-477272.html
前言
本題來源于全國職業(yè)技能大賽之大數(shù)據(jù)技術(shù)賽項工業(yè)數(shù)據(jù)處理賽題 -?離線數(shù)據(jù)處理 - 指標(biāo)計算
注:由于個人設(shè)備問題,代碼執(zhí)行結(jié)果以及最后數(shù)據(jù)顯示結(jié)果將不會給出。
題目:
?
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考(使用Scala語言編寫)
?
一、讀題分析
涉及組件:Hive
涉及知識點:
- HiveSQL語法的使用
- ...
二、處理過程
????????本題給出兩種參考方法一種是編寫HiveSQL代碼,另外一種是編寫Scala代碼使用spark處理框架去寫,本質(zhì)上差不多,調(diào)用的是SparkSQL。
但需注意的是:本題兩種代碼,作者均為測試證實,僅供參考。
?
1.HiveSQL
-- 在mysql端建表
create table machine_humidityAVG_compare
(
base_id int,
machine_avg varchar(255),
factory_avg varchar(255),
comparison varchar(255),
env_date_year varchar(255),
env_date_month varchar(255)
);
with temp as
(select base_id,
machine_avg,
avg(machine_avg) over () as factory_avg,
case
when machine_avg > avg(machine_avg) over () then '高'
when machine_avg < avg(machine_avg) over () then '低'
else '相同' end as comparison,
env_date_year,
env_date_month
from (select t.BaseID base_id,
avg(t.Humidity) as machine_avg,
year(t.InPutTime) as env_date_year,
month(t.InPutTime) as env_date_month
from fact_environment_data t
group by t.BaseID, year(t.InPutTime), month(t.InPutTime)))
insert
overwrite
table
shtd_industry.machine_humidityAVG_compare
select *
from temp;
-- 不能導(dǎo)入,需要用sqoop導(dǎo)入mysql
select * from shtd_industry.machine_humidityAVG_compare order by base_id desc limit 5;
2.SparkSQL
import org.apache.spark.sql.SparkSession
import java.util.Properties
object answer_No6 {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("MachineAvgProduceTime").master("local[*]").enableHiveSupport()
.getOrCreate()
val df = spark.sql(
"""
|
|select base_id,
| machine_avg,
| avg(machine_avg) over () as factory_avg,
| case
| when machine_avg > avg(machine_avg) over () then '高'
| when machine_avg < avg(machine_avg) over () then '低'
| else '相同' end as comparison,
| env_date_year,
| env_date_month
| from (select t.BaseID base_id,
| avg(t.Humidity) as machine_avg,
| year(t.InPutTime) as env_date_year,
| month(t.InPutTime) as env_date_month
| from dwd.fact_environment_data t
| group by t.BaseID, year(t.InPutTime), month(t.InPutTime))
|
|""".stripMargin)
val url = "jdbc:mysql://192.168.59.100:3306/shtd_industry"
val prop = new Properties()
prop.setProperty("user", "root")
prop.setProperty("password", "123456")
df.write.mode("overwrite").jdbc(url, "machine_humidityAVG_compare", prop)
}
}
?
三、重難點分析
????????每個設(shè)備的每月平均濕度與廠內(nèi)所有檢測設(shè)備每月檢測結(jié)果的平均濕度做比較(結(jié)果值為:高/低/相同),在這里實現(xiàn)起來還是有點難度的。使用了case配對。
????????本期為指標(biāo)計算第6篇,后續(xù)應(yīng)該還會出2篇。
總結(jié)?
這是一個關(guān)于使用Hive SQL統(tǒng)計檢測設(shè)備每月平均濕度并將結(jié)果存儲在MySQL數(shù)據(jù)庫中,并與廠內(nèi)所有檢測設(shè)備每月檢測結(jié)果的平均濕度做比較,然后在Linux的MySQL命令行工具中查詢前五條檢測設(shè)備ID倒序排列的數(shù)據(jù)的問題。下面是具體的要求和表結(jié)構(gòu):
- 在dwd層fact_environment_data表中,統(tǒng)計每個檢測設(shè)備(BaseID)每月的平均濕度(Humidity),得到base_id、env_date_year、env_date_month和每月平均濕度字段。
- 將每個檢測設(shè)備的每月平均濕度與廠內(nèi)所有檢測設(shè)備每月檢測結(jié)果的平均濕度做比較,得到設(shè)備id(base_id)、單設(shè)備每月檢測平均值(machine_avg)、廠內(nèi)所有設(shè)備每月檢測平均值(factory_avg)和比較結(jié)果(comparison,取值為“高”、“低”或“相同”)字段。
- 將比較結(jié)果存儲在MySQL數(shù)據(jù)庫shtd_industry的表machine_humidityAVG_compare中,表結(jié)構(gòu)包含base_id、machine_avg、factory_avg、comparison、env_date_year和env_date_month字段。
- 通過Linux的MySQL命令行工具查詢出前5條檢測設(shè)備ID倒序排列的數(shù)據(jù),將SQL語句和執(zhí)行結(jié)果截圖粘貼到報告中。
注意:這個題目需要掌握Hive SQL和MySQL數(shù)據(jù)庫以及Linux命令行工具的使用。
?
????????請關(guān)注我的大數(shù)據(jù)技術(shù)專欄大數(shù)據(jù)技術(shù) 作者: Eternity.Arrebol
????????請關(guān)注我獲取更多與大數(shù)據(jù)相關(guān)的文章Eternity.Arrebol的博客
Q-歡迎在評論區(qū)進行交流-Q文章來源:http://www.zghlxwxcb.cn/news/detail-477272.html
?
到了這里,關(guān)于大數(shù)據(jù)之指標(biāo)計算(6) -- 編寫Hive SQL代碼,根據(jù)dwd層dwd.fact_environment_data表,統(tǒng)計檢測設(shè)備的每月平均濕度與廠內(nèi)檢測結(jié)果做對比存入Mysql數(shù)據(jù)庫中的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!