天天看點

《大資料內建(1)》一1.1 傳統資料內建

本節書摘來自華章出版社《大資料內建(1)》一書中的第1章,第1.1節,作者 [美] 董欣(xin luna dong)戴夫士·斯裡瓦斯塔瓦(divesh srivastava),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

  資料內建的目标是為多個自治資料源中的資料提供統一的存取。這一目标說起來容易,但實作起來已被證明異常困難,即使是針對少量幾個結構化資料源,即傳統的資料內建[doan et al. 2012]。

  為了了解資料內建中一些挑戰性的問題,這裡用一個航空領域的例子來說明。該領域的常見任務是跟蹤航班的起飛和降落,檢查航班時刻表以及預定航班等。

  我們有一些不同類型的資料源,包括:兩個航空公司資料源airline1和airline2(如美國聯合航空公司、美國航空公司、達美等),分别提供自家航空公司航班的資訊;一個機場資料源airport3,提供在某機場(如ewr、sfo)出發和到達航班的資訊;以及一個旅行資料源airfare4(如kayak、orbitz等),提供不同航班不同價位的票價資訊;還有一個資訊類資料源airinfo5(如wikipedia table),提供有關機場和航空公司的資料。

  各資料源的樣例資料如表1-1~表1-8所示。為簡便起見,表中使用縮寫的屬性名,屬性名的縮寫和全稱的對應關系見表1-9。下面解釋各表的具體内容。

  1.資料源airline1

  資料源airline1提供兩張關系表airline1.schedule(flight id, flight number, start date, end date, departure time, departure airport, arrival time, arrival airport)和airline1.flight(flight id, departure date, departure time, departure gate, arrival date, arrival time, arrival gate, plane id)。加下劃線的屬性構成相應表的主鍵。flight id被用作兩張表的連接配接鍵。

  關系表airline1.schedule如表1-1所示,顯示了航班的時間計劃表。例如,airline1.schedule中的記錄r11說明airline1航空公司的49号航班在2013-10-01到2014-03-31期間,固定從ewr飛往sfo,起飛時間18:05,到達時間21:10。記錄r12顯示同一航班在2014-04-01到2014-09-30期間安排了另外的起飛降落時間。記錄r13和r14分别顯示了55号航班在2013-10-01到2014-09-30期間兩個飛行段的安排,第一段從ord飛到bos,第二段從bos飛到ewr。

  關系表airline1.flight如表1-2所示,顯示了airline1.schedule中航班的實際起飛和到達資訊。例如,airline1.flight中的r21記錄了對應于r11(fi等于123,為兩者的連接配接鍵)的航班的一次具體的飛行,即pi(飛機号)為4013的飛機,實際于2013-12-21的18:45(比計劃的時間18:05晚40分鐘)從c98登機口起飛,并于2013-12-21的21:30(比計劃的時間21:10晚20分鐘)降落在81号登機口。記錄r11和r21都用淺灰高亮顯示以表示它們的關系。同一張表中的記錄r22記錄了航班r11的另外一次實際飛行,比計劃的起飛降落時間有更大的延遲。記錄r23和r24記錄的是2013-12-29航班r13和r14的飛行資訊。

《大資料內建(1)》一1.1 傳統資料內建

2.資料源airline2

  資料源airline2提供的資訊類似于資料源airline1,但是使用的是關系表airline2.flight(flight number, departure airport, scheduled departure date, scheduled departure time, actual departure time, arrival airport, scheduled arrival date, scheduled arrival time, actual arrival time)。

  關系表airline2.flight如表1-3所示,包含計劃的和實際的航班資訊。例如,記錄r31記錄了airline2航空公司的53号航班計劃2013-12-21的15:30從sfo起飛,但實際延遲30分鐘,計劃2013-12-21的23:35抵達ewr,但實際晚點了40分鐘,第二天(表中顯示+1d)即2013-12-22到達。注意表中有一條關于airline2航空公司49号航班的記錄r35,它不同于ailine1航空公司的49号航班。這表明不同航空公司可以使用相同的航班号。

  不同于資料源airline1,資料源airline2沒有釋出出發登機口和到達登機口以及飛機号。這表明這些資料源的模式之間是有差異的。

《大資料內建(1)》一1.1 傳統資料內建

3.資料源airport3

  資料源airport3提供兩張關系表airport3.departures(air line, flight number, scheduled, actual, gate time, takeoff time, terminal, gate, runway)和airport3.arrivals(air line, flight number, scheduled, actual, gate time, landing time, terminal, gate, runway)。

  關系表airport3.departures如表1-4所示,僅釋出了從ewr機場起飛的航班。例如,表中的記錄r41記錄了airline1航空公司的49号航班,計劃在2013-12-21的18:45從航站樓c的98号登機口出發,18:53從跑道2起飛。表中沒有該航班的到達機場、到達日期和時間的資訊。注意r41對應于記錄r11和r21,同樣用淺灰高亮顯示。

《大資料內建(1)》一1.1 傳統資料內建

 關系表airport3.arrivals如表1-5所示,僅釋出了到達ewr機場的航班。例如,表中的記錄r51記錄了airline2航空公司的53号航班,計劃2013-12-21到達,實際2013-12-22到達,于00:15在跑道2降落,00:21抵達航站樓b的53号登機口。表中沒有該航班的出發機場、出發日期和時間。注意r51對應于記錄r31。

《大資料內建(1)》一1.1 傳統資料內建

  不同于資料源airline1和airline2,資料源airport3區分開航班離開/到達登機口的時間和在機場跑道上起飛/降落的時間。

  4.資料源airfare4

  旅行資料源airfare4釋出對不同航空公司售票資訊的比較,包括航班的時間計劃airfare4.flight(flight id, flight number, departure airport, departure date, departure time, arrival airport, arrival time)以及機票價格airfare4.fares(flight id, fare class, fare)。flight id被用作兩表的連接配接鍵。

  例如,如表1-6所示,airfare4.flight中的記錄r61顯示airline1航空公司的航班a1-49計劃于2013-12-21的18:05從newark liberty機場出發,并于當天的21:10抵達san franciso機場。注意r61對應于記錄r11、r21和r41。

  關系表airfare4.fares中的記錄如表1-7所示,給出了該航班的各類票價。例如,記錄r71顯示該航班的a類票價是$5799.00;fi456是連接配接鍵。

《大資料內建(1)》一1.1 傳統資料內建

5.資料源airinfo5

  資料源airinfo5釋出的是關于機場和航空公司的資訊,即關系表airinfo5.airportcodes(airport code, airport name)和airinfo5.airlinecodes(air line code, air line name)。

  例如,如表1-8所示,airinfo5.airportcodes中的記錄r81顯示代号為ewr的機場是美國紐澤西州的newark liberty機場。類似地,airinfo5.airlinecodes的記錄r91顯示代号為a1的航空公司是airline1航空公司。

《大資料內建(1)》一1.1 傳統資料內建
《大資料內建(1)》一1.1 傳統資料內建

  雖然5個資料源單獨都是有用的,但當它們被內建在一起時,這些資料的價值将被大大提升。

  1.內建資料源

  首先,每個航空公司資料源(如airline1、airline2)都從與機場資料源airport3的連結中獲益,因為機場資料源提供了航班實際出發和到達的詳細資訊,如登機時間、起飛降落的時間和使用的跑道;這些可以幫助航空公司更好地分析航班延誤的原因。其次,機場資料源airport3也可以從與航空公司資料源(如airline1、airline2)的連結中獲益,因為航空公司資料源提供了關于航班時刻表和整體飛行計劃的詳細資訊(尤其是對那些多段飛行的航班,如airline1的55号航班);這些可以幫助機場更好地了解航班的飛行模式。第三,旅行資料源airfare4可以通過連結航空公司資料源和機場資料源提供一些附加資訊,例如曆史上準點起飛/到達的統計資料等;而這些資訊對預定航班的使用者可能非常有用。這種關聯使得資訊源airinfo5非常關鍵。這一點我們在後面會看到。最後,将所有這些不同資料源內建起來也會使使用者獲益,因為他們不需要分别去通路多個資料源才能獲得自己想要的資訊。

  例如,查詢“計算出上個月每個航班的計劃和實際出發時間之間的平均延遲,以及實際登機和起飛時間之間的平均延遲”可以在內建起來的資料庫上作答,卻無法用任一單個的資料源回答。

  然而,內建多個自治的資料源非常困難,經常需要大量人工的努力去了解每個資料源的資料語義以解決歧義性問題。讓我們再一次看一下航班的示例。

  2.語義歧義性

  為了正确對齊各種資料源表,我們需要了解:i)同一概念資訊在不同資料源中的表示可能非常不同;ii)不同概念資訊在不同資料源中的表示可能很相似。

  例如,資料源airline1在表airline1.schedule中給出在一定日期範圍内(由start date和end date所指定)的航班時刻表,使用屬性departure time和arrival time記錄時間資訊。然而,資料源airline2在表airline2.flight中一起給出了航班時刻表和實際航班的飛行資訊,每次不同的飛行用不同的記錄描述,并且使用不同的屬性名稱,scheduled departure date,scheduled departure time,scheduled arrival date,scheduled arrival time。

  又如,資料源airport3既記錄了航班的實際登機口出發/到達時間(表airport3.departures和表airport3.arrivals中的gate time),也記錄了實際起飛/降落時間(表airport3.departures中的takeoff time和表airport3.arrivals中的landing time)。而airline1和airline2資料源隻記錄其中一種時間,具體地,仔細檢查資料就會發現,資料源airline1記錄的是登機口出發/到達時間(表airline1.schedule和airline1.flight中的departure time和arrival time),而airline2記錄的是起飛/降落時間(表airline2.flight中的scheduled departure time,actual departure time,scheduled arrival time,actual arrival time)。

  不同的概念資訊表示得很相似,如屬性departure date在資料源airline1中表示實際出發日期(在表airline1.flight中),但是在資料源airfare4中表示計劃的出發日期(在表airfare4.flight中)。

  3.執行個體表示歧義性

  要将來自多個資料源的同一個資料執行個體關聯在一起,我們需要意識到由于資料源的自治性,這些資料執行個體具有不同的表示形式。

  例如,航班号在資料源airline1和airline2中被表示為數字(例如,r11中的49,r31中的53),在資料源airfare4中被表示為數字和字母的組合(如,r61中的a1-49)。類似地,出發和到達機場在資料源airline1和airline2中被表示為三字母的編碼(如ewr、sfo、lax),但在airfare4.flight表中被表示為一個描述性的字元串(如newark liberty,san francisco)。由于航班是由屬性組合(airline, flight number, departure airport, departure date)所唯一辨別的,如果沒有另外一張表(例如表1-8中的airinfo5.airlinecodes和airinfo5.airportcodes表)将航空公司編碼和機場編碼分别和它們描述性的名字對應起來的話,表airline4.flight中的資料将無法和airline1、airline2和airline3中的相應資料關聯起來。即使有這樣的對應表,我們仍然需要使用近似字元串比對的技術 [hadjieleftheriou and srivastava 2011]将airfare4.flight中的newark liberty比對到airinfo5.airportcodes表中的newark liberty, nj, us。

  4.資料不一緻性

  為了融合來自不同資料源的資料,我們需要解決執行個體級的歧義性和資料源之間的不一緻性。

  例如,airline2.flight中的r32和airport3.arrivals中的r52存在着不一緻(兩者被高亮顯示為藍色以表明它們指的是同一航班)。r32表示airline2航空公司的53号航班的原定到達日期和實際到達時間分别是2013-12-22和00:30,即實際到達日期和原定到達日期是同一天(不同于r31,其實際到達時間包含了(+1d),表明實際到達日期比原定到達日期晚一天)。然而,r52則記錄了此航班的實際到達時間是2013-12-23的00:30。在內建的資料裡,需要解決這樣的不一緻性。

  另一個例子,airfare4.flight中的r62表示airline1的49号航班在2014-04-05原定的出發和到達時間分别是18:05和21:10。雖然出發日期和airline1.schedule中的r12一緻(r12和r62被高亮顯示為綠色來表示它們之間的這種關系),但是原定的出發和到達時間卻不一緻,也許因為r62錯誤地使用了airline1.schedule中的r11中給出的過去的出發和到達時間。類似地,airfare4.flight中的r65表示airline2的53号航班在2014-06-28原定的出發和到達時間分别是15:30和23:35。雖然出發日期和airline2.flight中的r33一緻(r65和r33都被高亮顯示為黃綠色以表明它們之間的關系),但是原定的出發和到達時間卻不一緻,也許因為r65錯誤地使用了airline2.flight中的r32給出的過去的出發和到達時間。再一次表明,這些不一緻性在內建起來的資料裡需要被解決。

  傳統資料內建的方法解決語義歧義性、執行個體表示歧義性和資料不一緻性帶來的挑戰時使用的是一種流水線體系結構,主要包含三個步驟,如圖1-1所示。

《大資料內建(1)》一1.1 傳統資料內建

  傳統資料內建中的第一個主要步驟是模式對齊。它主要針對的是語義歧義性帶來的問題,目标是了解哪些屬性具有相同的含義而哪些屬性的含義不同。其正式的定義如下。

   給定某一領域内的一組資料源模式,不同的模式用不同的方式描述該領域。模式對齊步驟生成以下三種輸出。

  1)中間模式。它為不同資料源提供一個統一的視圖,并描述了給定領域的突出方面。

  2)屬性比對。它将每個源模式中的屬性比對到中間模式的相應屬性。

  3)模式映射。每個源模式和中間模式之間的映射用來說明資料源的内容和中間資料的内容之間的語義關系。

  結果模式映射被用來在查詢問答中将一個使用者查詢重新表達成一組底層資料源上的查詢。

  種種原因使得這一步并不簡單。不同資料源可以用非常不同的模式描述同一領域,如前面的航班例子。他們可以用不同的屬性名來描述同一屬性(如airline1.flight中的arrival date、airline2.flight中的actual arrival date以及airport3.arrivals中的actual)。另外,資料源也會用相同的名字表示不同含義的屬性(如airport3.departures中的actual指的是實際出發日期,而airport3.arrivals中的actual指的是實際到達日期)。

  傳統資料內建中的第二個主要步驟是記錄連結。它主要針對的是執行個體表示歧義性所造成的問題,目标是了解哪些記錄表示相同的實體而哪些不是。其正式的定義如下。

   給定一組資料源,每個包含了定義在一組屬性上的一組記錄。記錄連結是計算出記錄集上的一個劃分,使得每個劃分類包含描述同一實體的記錄。

  即使已經完成了模式對齊,記錄連結仍然很有挑戰。不同的資料源會用不同的方式描述同一實體。例如,airline1.schedule中的r11和airline1.flight中的r21應該被連結到airport3.departures中的r41;然而,r11和r21沒有顯式地提到航空公司的名字,而r41沒有顯式地給出起飛機場,而要唯一确定一個航班,這兩種資訊都需要。另外,不同資料源可能使用不同的形式表示相同的資訊(例如前面例子中讨論的表示機場的各種方式)。最後,在數百億條記錄中使用兩兩比較的方法來判定兩條記錄是否描述同一實體的方法是不可行的。

  傳統資料內建中的第三個主要步驟是資料融合。它主要針對的是資料品質帶來的挑戰,目标是了解在資料源提供互相沖突的資料值時在內建起來的資料中應該使用哪個值。其正式的定義如下。

   給定一組資料項,以及為其中一些資料項提供值的一組資料源。資料融合決定每個資料項正确的值。

  許多種原因都可能造成資料沖突,如輸入錯誤、計算錯誤(例如,r32和r52的實際到達日期之間的不一緻)、過時的資訊(例如,r12和r62的原定出發和到達時間之間的不一緻)等。

  我們将在後面的章節逐一介紹每一步驟中所使用的各種方法。下面我們繼續讨論當資料內建從傳統資料內建演化到大資料內建時所帶來的挑戰和機遇。

繼續閱讀