?

基于kettle的車機大數據清洗方案

2022-07-18 08:56唐文笙張亮程登溫麗梅
電子測試 2022年12期
關鍵詞:車機數據表排序

唐文笙,張亮,程登,溫麗梅

(上汽通用五菱汽車股份有限公司 廣西汽車新四化重點實驗室,廣西柳州,545007)

0 引言

近年來,大數據技術掀起了計算機領域的一個新的浪潮,無論是數據挖掘、數據分析、數據可視化,還是機器學習、人工智能,它們都繞不開“數據”這個主題,從新興產業到傳統行業,從統計學家到軟件開發人員,越來越多的人對數據科學產生了興趣,廉價的硬件、可靠的數據處理工具以及海量的數據這些資源使得我們可以輕松地、精確地發現趨勢、預測未來。

而同時,對于傳統汽車行業,近幾年由內而外的智能化轉型,讓智能汽車逐步成為了新一代汽車消費者的首選,而智能汽車各個零部件所產生的海量數據,更加有助于汽車廠商們對用戶的需求進行定位,從而幫助汽車廠商們快速跟進用戶需求,拓寬汽車營銷市場。然而,海量數據來源于汽車的各個零部件,每個零部件所上傳的數據類型也是多且繁雜的,因此數據中會夾雜著不完整、重復以及錯誤的數據,如果直接使用這些原始數據,不僅沒辦法提高數據決策的準確性,反而更容易帶偏決策,嚴重者可能錯失用戶市場。所以,我們需要對原始數據進行一個數據清洗的相關操作,進而得出可靠的、準確的數據。

ETL就是用來描述將數據從源端經過抽取、轉換、加載至目的端的過程,它能夠對各種分布的、異構的源數據進行抽取,按照預先設計好的規則將不完整數據、重復數據以及錯誤數據等“臟”數據進行清洗,得到符合要求的“干凈”數據。

Kettle是一款完全開源的ETL工具,其主要作用是完成數據抽取、轉換和加載等數據處理方面的工作。Kettle誕生于2006年,經過十五年的發展完善,kettle現在已經可以全面支持多平臺運行,可對接包括傳統數據庫、文件、大數據平臺、接口、流數據等數據源,支持ETL數據管道加入機器學習算法。同時,kettle提供了簡單明了的圖形操作界面,它的流程式設計也十分地便捷。

1 Kettle的轉換和作業

Kettle的控件包含兩個部分,即轉換(Transform)和作業(Job)。

轉換是ETL中最主要的部分,它處理抽取、轉換、加載各個階段各種對數據行的操作。轉換包括一個或多個步驟,如讀取文件、過濾輸出行、數據清洗或者將數據加載到數據庫。

轉換里的步驟通過跳來連接,跳定義了一個單向通道,允許數據從一個步驟向另一個步驟流動。在Kettle中,數據的單位就是行,數據流就是數據行從一個步驟到另一個步驟的移動過程。

轉換的跳,就是步驟之間帶箭頭的連線,跳定義了步驟之間的數據通路。跳實際上是兩個步驟之間的行集緩存,當行集滿了,則向行集寫入數據的步驟將停止寫入,直到行集又有了空間,當行集空了,從行集讀取數據的步驟將停止讀取,直到行集又有了可讀取的數據行。跳基于這種行集緩存的規則允許每個步驟都由一個獨立的線程運行,這樣的并發程度最高;同時這一規則也允許數據以最小消耗內存的數據流的方式來處理。當轉換啟動后,所有步驟都同時啟動,從它們的輸入跳中讀取數據,并把處理過的數據寫入到輸出跳,直到輸出跳中不再有數據,就中止步驟的運行,當所有的步驟都中止了,整個轉換就中止了。

Kettle中提供了許多單一組件用以實現轉換,每個轉換由一個或者多個步驟組成,每個步驟通常包含一個組件,每個組件都有其單一作用,一個完整的轉換可以作為作業的一個步驟而存在,轉換是kettle開發的基礎,而其中的組件是轉換的基礎,下文會詳細介紹常用組件的作用。

作業由一個或者多個作業項組成,這些作業項按照某種順序來執行,形成一個工作流;作業執行順序有作業項之間的跳和每個作業執行結果來決定。作業中每一個作業項,都必須等到前面的步驟執行完畢,后面的步驟才會執行,如此等待全部步驟完成后就完成了此作業。

作業是按照順序執行作業項,所以必須定義一個起點,從而有了一個“開始”的作業項,一個作業只能定義一個“開始”作業項。同時,Kettle使用了一種回溯算法來執行作業里的所有作業項,而且作業項的云心結果(真或假)也決定執行路徑。這種回溯算法就是:假設執行到了圖里的一條路徑的某個節點時,要依次執行這個節點的所有子路徑,直到沒有再可以執行的子路徑,就返回該節點的上一個節點。這種回溯算法有兩個重要特征:1.當在作業中創建了一個循環時,一個作業項就會被執行多次,作業項的多次運行結果會保存在內存中,后續作業項可以使用。2.如果不對作業項定義執行順序的話,那么該作業會存在多次運行結果,這種情景對于作業的嵌套很不友好,不確定的因素會直接影響后續作業的執行結果,進而影響到整個作業流程的結果。

2 Kettle關鍵組件

Kettle本身是一個可視化的ETL工具,下面從幾個點介紹Kettle的關鍵組件:

(1)數據準備

Kettle提供了多種數據庫連接方式,其中包括JDBC、ODBC和JNDI連接,一般情況下,常用的連接方式是JDBC和JNDI,這兩種方式與Kettle本身開發源碼十分契合。值得注意的是,配置好數據源,做好數據準備之后,可以將其配置共享為全局的數據源,這樣就可以在所有的轉換中共用一個數據,避免冗余接入的麻煩。

(2)數據抽取

Kettle提供多種數據抽取方式,其中包括XML輸入、EXCEL輸入、JSON輸入、CSV輸入、表輸入等,前三種輸入方式為文件輸入方式,可直接讀取指定文件內數據,表輸入為數據庫輸入,通過查詢語句來提取到數據庫表中數據。

(3)數據轉換

Kettle中不提供單一的數據轉換步驟,有許多的組件組合成為一個完整的數據轉換功能。下面就一些常用的組件進行介紹:

排序記錄:顧名思義,就是對數據流進行排序,Kettle中許多組件的前置步驟就需要進行排序;

去除重復記錄:此組件的作用就是去除重復的數據記錄,如果存在兩條重復的記錄,則會刪除第二條數據;

數值范圍:此組件的作用對指定的字段進行限制,將其限制在指定的數值范圍內;

拆分字段:此組件的作用是將一個字段的內容按照指定規則拆分;

替換NULL值:此組件的作用是將NULL值替換成指定的內容;

值映射:此組件的作用是將字段內容映射成指定的內容;

此外,Kettle還提供其他的組件功能,各個轉換功能都十分強大。

(4)數據裝載

完成數據準備、抽取以及轉換后,就需要將數據裝載輸出,Kettle提供多種數據裝載組件,其中有表輸出、插入/更新、EXCEL輸出、文本文件輸出等。表輸出和插入/更新是輸出至數據庫表,而EXCEL輸出和文本文件輸出是輸出成文件形式,其中插入/更新是按照指定的字段進行插入/更新操作,而表輸出、EXCEL輸出、文本文件輸出則是全量輸出。

(5)查詢連接

實際Kettle應用有許多需要連表查詢的操作,將兩個數據庫通過指定關鍵字連接,并查詢數據結果,此時就可以用到記錄集連接、記錄關聯以及流查詢了,其中:流查詢主要用來查詢數據源里的數據并合并到主數據流中,記錄集連接則是通過關鍵字進行連接,實現SQL語句中左右連接以及內外連接的效果,記錄關聯則是實現笛卡爾積的一個步驟組件。

3 數據清洗方案

對于數據及時性有較高要求的業務場景中,比如智能網聯汽車車機產生的行駛數據,每時每刻都會有許許多多的車輛上傳數據報文,每天的數據內容巨大,而且其內容參差不齊,這就要求我們有一個完整的數據清洗規則,對于車機上傳的臟數據進行清洗,進而獲得高質量的車機行駛數據。以下將會通過一個實際案例來講解數據清洗方案。

(1)數據準備

首先準備一個車機數據表t_car,該表由ID、VIN、駕駛里程、駕駛時長、平均速度、最高速度組成,該表為一天多臺車的駕駛數據統計結果,不應當存在一天多條記錄的現象,具體數據表如表1所示。

表1 車機數據表

(2)去除重復數據

Kettle中提供了去除重復記錄組件以實現去除重復記錄的效果,使用此組件前需要對數據進行排序,因此,完整的步驟應該是:輸入→排序記錄→去除重復記錄→輸出;表輸入為讀取車機數據表t_car數據,排序記錄按照VIN進行排序,并按照VIN進行去除重復記錄,最終數據流流入下一步。

(3)數據校驗

數據經過去重處理后,去除了重復的LK1545記錄,可以看見數據還是存在臟數據:最高車速為278km/h 以及 最高車速錯亂,故而還需要對每個數據項進行進行數據校驗。對于此類數值類數據,可以使用數值范圍來進行數據校驗,對每個字段進行數值約束:最高車速字段的最小值定義為0,最大值定義為150,同樣,對平均車速加以同樣的約束。

(4)數據輸出

數據輸出使用表輸出來實現數據輸出,將經過了前面步驟的數據輸出到指定的數據表,即可完成數據清洗的過程。整體轉換流程如圖1所示。

圖1 Kettle實現流程圖

最終的數據清洗效果數據表如表2所示。

表2 清洗完成數據表

可以看到,重復VIN的數據已被清洗掉,同時車速異常的數據也被上文定義的規則清洗掉,得到了質量更高的數據內容。

(5)任務部署

此前的1、2、3、4步驟已完成了數據清洗轉換的過程,現在需要將此轉換部署成定時任務的形式。將此轉換封裝成作業,設置定時,每天的早上7點30分啟動作業,同時設置失敗郵件警告,選擇發送郵件組件,設置收件人、發件人及郵件服務器,當作業失敗時發送郵件給接收人,可以達到監控作業的目的,方便對應人員及時處理作業過程中發生的異常;完成相關設置后,點擊啟動,Kettle會保留一個進程在后臺,每天7點30分啟動作業,作業失敗時會有郵件通知,作業成功時無其他操作,即完成了任務部署。

4 總結

在數據爆發式增長的時代,數據挖掘的價值日益可見,數據清洗已經成為大數據挖掘項目中必不可少的準備步驟。數據的質量也是會直接影響數據分析的結果,數據清洗方案中包含的步驟有很多,例如缺值的處理、去除重復記錄和數據的校驗等等。本文通過Kettle工具提供的組件功能,構建了一個車機大數據清洗流程,實現了對車機大數據的清洗目標。

未來將不斷完善數據轉換清洗的過程,提高數據質量,優化ETL設計流程,提升數據更新效率,為企業進一步的商業智能分析、OLAP分析以及知識發現奠定數據基礎。

猜你喜歡
車機數據表排序
汽車里還能看視頻刷彈幕《嗶哩嗶哩車機版》
作者簡介
恐怖排序
湖北省新冠肺炎疫情數據表(2.26-3.25)
湖北省新冠肺炎疫情數據表
湖北省新冠肺炎疫情數據表
車載信息娛樂系統用戶體驗與偏好研究
節日排序
蹊蹺:吉利帝豪同款車機配置不同
指哪打哪
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合