一.背景
?pxf適用于聯(lián)邦數(shù)據(jù)的查詢,支持多種數(shù)據(jù)源,如Hadoop、hive、關(guān)系數(shù)據(jù)庫。支持多個異構(gòu)數(shù)據(jù)源,并只查詢數(shù)據(jù)源中少量數(shù)據(jù)集,而避免對數(shù)據(jù)集執(zhí)行ETL操作。
二.PXF架構(gòu)

圖1
三、代碼結(jié)構(gòu)
1.物理結(jié)構(gòu)

圖2
2.接口定義
1)/pxf/{version}/Fragmenter/getFragments
i)獲取查詢的分片信息,例如:基于JDBC查詢中參數(shù)PARTITION_BY,就會得到分區(qū)信息,用以支持多個segment進行并行查詢。
ii)FragmenterResource.java的getFragments函數(shù)
2)/pxf/<version>/Bridge/
i)查詢數(shù)據(jù),下推查詢命令到數(shù)據(jù)源系統(tǒng),如通過JDBC或API。
ii)BridgeResource.java的read函數(shù),結(jié)果以MediaType.APPLICATION_OCTET_STREAM輸出。
3)/pxf/{version}/Writable/stream
i)寫數(shù)據(jù),向外部系統(tǒng)寫數(shù)據(jù),如通過JDBC或API。
ii)WritableResource.java的stream,輸入為MediaType.APPLICATION_OCTET_STREAM。
3.代碼邏輯圖
1)getFragments序列圖

圖3
2)讀數(shù)據(jù)

圖4
四、代碼路徑
https://github.com/greenplum-db/pxf/tree/master/server
原文:http://www.itdecent.cn/writer#/notebooks/39475326/notes/73564736