無處不在的三角洲獨立:Java, Scala,蜂巢,轉眼間,Trino, BI,和更多!
2022年1月28日, 在工程的博客
三角洲地區獨立的庫是一個單節點的Java庫,可用於讀取和寫入三角洲表。具體地說,這個庫提供了api來與一個表的元數據在事務日誌,實現三角洲事務日誌協議實現的事務保證三角洲湖格式。值得注意的是,這個項目並不依賴於Apache火花™,隻有少數傳遞依賴關係。因此,它可以使用任何處理引擎或應用程序訪問三角洲表。
δ獨立優化情況下當你想讀和寫三角洲表使用non-Spark引擎的你的選擇。它是一個“低級”庫,我們鼓勵開發人員貢獻開源,更高級的連接器他們渴望引擎使用所有三角洲湖三角洲獨立元數據交互。
我們興奮的釋放三角洲連接器0.3.0,介紹支持編寫三角洲表。這個版本的主要特點是:
三角洲獨立
-
- 寫功能——這個版本引入了新的api來支持創建和寫作三角洲表沒有Apache火花™。外部處理引擎可以寫拚花的數據文件,然後使用api三角洲表自動提交文件。後,三角洲事務日誌協議實現使用樂觀並發控製,管理多個作家,自動生成檢查點文件,和管理日誌和檢查點清理根據協議。主要的Java類暴露
OptimisticTransaction
,這是通過訪問DeltaLog.startTransaction ()
。
- 寫功能——這個版本引入了新的api來支持創建和寫作三角洲表沒有Apache火花™。外部處理引擎可以寫拚花的數據文件,然後使用api三角洲表自動提交文件。後,三角洲事務日誌協議實現使用樂觀並發控製,管理多個作家,自動生成檢查點文件,和管理日誌和檢查點清理根據協議。主要的Java類暴露
-
OptimisticTransaction.markFilesAsRead (readPredicates)
必須閱讀所有使用元數據在事務(而不是DeltaLog
。它是用來檢測和確定的並發更新邏輯這個事務之間的衝突和承諾事務可以解決。OptimisticTransaction.commit(操作、操作engineInfo)
用於提交修改。如果一個衝突的事務已經提交第一(見上圖)拋出一個異常,否則,返回表是提交的版本。- 冪等可以實現使用寫道
OptimisticTransaction.txnVersion (appId)
檢查版本增加犯下相同的應用程序。 - 每個提交必須指定
操作
被執行的事務。 - 為並發事務擔保微軟Azure和Amazon S3上寫道。這個版本包括自定義擴展支持並發寫在Azure和S3存儲係統上,這對自己沒有必要的原子性和持久性的擔保。請注意,事務保證隻提供並發S3從單個集群上寫道。
- 在快照Memory-optimized迭代器實現閱讀文件:
DeltaScan
介紹了迭代器實現閱讀addfile
在快照支持分區修剪。它可以通過訪問Snapshot.scan ()
或Snapshot.scan(謂詞)
,後者基於過濾器文件謂詞
和任何分區列在文件的元數據。這個API可以顯著減少的閱讀文件時的內存占用和實例化一個快照DeltaLog
(由於內部使用)。
- 分區的元數據讀取和衝突檢測過濾寫道:這個版本引入了一個簡單的表達式框架分區修剪在元數據查詢。當閱讀文件快照,篩選返回的
addfile
通過分區列上謂詞
成Snapshot.scan(謂詞)
。當更新一個表在一個事務中,指定哪些分區讀通過readPredicate
成OptimisticTransaction.markFilesAsRead (readPredicate)
檢測邏輯衝突,盡可能避免事務衝突。
-
- 各種各樣的更新:
-
-
DeltaLog.getChanges()公開增量元數據API的變化。VersionLog包裝版本號和版本的行動清單。 ParquetSchemaConverter
轉換StructType
拚花模式模式。- 修複# 197為
RowRecord
因此,分區列中的值可以閱讀。 - 各種各樣的bug修複。
-
三角洲連接器
- 蜂巢3的支持蜂巢連接器
- 微軟PowerBI連接器用於讀取本地三角洲表:閱讀三角洲表直接從PowerBI從任何集群存儲係統沒有運行支持火花。功能包括在線/定期刷新PowerBI服務,支持三角洲湖時間旅行(例如,
版本的
),分區消除使用分區模式的表。更多細節見專用README.md。
δ獨立是什麼?
的三角洲地區獨立的項目在三角洲連接器,原名三角洲獨立讀者(域),是一個JVM庫,可以用來閱讀和寫三角洲湖表。不像三角洲湖核心,這個項目不使用火花讀或寫表和隻有少數傳遞依賴關係。它可以使用任何應用程序不能使用火花集群(閱讀更多:如何查詢本機與Scala三角洲湖,Java、Python)。
這個項目允許開發者建立一個三角洲連接器後外部處理引擎三角洲協議不使用清單文件。閱讀器組件確保開發人員可以讀取的鑲花集文件與三角洲有關表版本要求。三角洲的一部分獨立0.3.0,讀者包括memory-optimized,懶惰的迭代器實現DeltaScan.getFiles
(公關# 194)。下麵的代碼示例文件讀取拚花在一個分布式的方式三角洲獨立(0.3.0)包括快照:掃描(過濾器)::getfile
,支持分區修剪和優化內部迭代器實現。
進口io.delta.standalone.Snapshot;DeltaLog日誌= DeltaLog。為Table(new Configuration(),“TABLE_PATH美元”);快照latestSnapshot = log.update ();.getSchema StructType模式= latestSnapshot.getMetadata () ();DeltaScan掃描= latestSnapshot.scan (新和(新和(新等於(schema.column (“年”),文字的時候(2021年)),新等於(schema.column (“月”),文字的時候(11))),新等於(schema.column (“客戶”),文字的時候(“XYZ”))));CloseableIteratoriter= scan.getFiles ();試一試{而(iter.hasNext ()) {AddFile AddFile =iter。下一個();/ /醫學引擎來處理讀取數據在“addFile.getPath ()”和應用任何“scan.getResidualPredicate ()”}}最後{iter.close ();}
,三角洲獨立0.3.0包含一個新的作家組件,允許開發人員生成鋪文件本身並將這些文件添加到一個增量表自動支持冪等寫道(閱讀更多:三角洲獨立作家設計文檔)。下麵的代碼片段顯示了如何提交事務日誌添加新文件和刪除舊的錯誤的文件寫拚花後文件存儲。
進口io.delta.standalone.Operation;進口io.delta.standalone.actions.RemoveFile;進口io.delta.standalone.exceptions.DeltaConcurrentModificationException;進口io.delta.standalone.types.StructType;
列表removeOldFiles = existingFiles.stream (). map(路徑- > addFileMap.get(路徑).remove ()).collect (Collectors.toList ());
列表addNewFiles = newDataFiles.getNewFiles (). map(文件- >新AddFile (file.getPath (),file.getPartitionValues (),file.getSize (),System.currentTimeMillis (),真正的,/ / isDataChange零,/ /統計數據零/ /標簽);).collect (Collectors.toList ());列表totalCommitFiles =新ArrayList ();totalCommitFiles.addAll (removeOldFiles);totalCommitFiles.addAll (addNewFiles);/ /活潑的是引用一個通用的引擎試一試{txn.commit (totalCommitFiles新操作(Operation.Name.UPDATE),“敏捷的/ 1.0.0”);}抓(DeltaConcurrentModificationException e) {/ /處理異常}
蜂巢3δ獨立使用
三角洲獨立0.3.0支持蜂巢2和3允許蜂巢可以讀取三角洲表。下麵是一個例子,如何創建一個蜂巢外部表訪問三角洲表。
創建外部表deltaTable (col1INTcol2字符串)存儲通過“io.delta.hive.DeltaStorageHandler”位置“/δ/表/路徑”
如何設置蜂巢的更多細節,請參閱δ連接器>蜂巢連接器。重要的是要注意這個連接器隻支持Apache蜂巢;它不支持Apache火花或很快。
閱讀從PrestoDB三角洲湖
證明了在PrestoCon 2021會話轉眼間三角洲湖連接器最近,合並轉眼間/δ連接器利用三角洲獨立項目可以讀取三角洲事務日誌不需要的清單文件。memory-optimized,懶惰的迭代器包含在三角洲獨立0.3.0允許PrestoDB高效地遍曆三角洲事務日誌時元數據和避免伯父問題閱讀大型三角洲表。
與轉眼間/δ連接器除了查詢δ表本身很快,你可以使用@
語法來執行時間旅行的查詢三角洲表和查詢以前的版本版本或時間戳。以下代碼示例查詢同一NYCTaxi 2019數據集的早期版本中使用的版本。
#版本1的s3://…/nyctaxi_2019_part表與nyctaxi_2019_part作為(選擇*從deltas3。“路徑”美元。”s3: / /…/(電子郵件保護))從nyctaxi_2019_part選擇計數(1);
#輸出59354546
# 5版本s3: / /…/ nyctaxi_2019_part表與nyctaxi_2019_part (SELECT * FROM deltas3。“路徑”美元。”s3://…/nyctaxi_2019_part@v5)選擇數(1)從nyctaxi_2019_part;
#輸出78959576
使用這個連接器,您都可以指定表從你metastore三角洲表和查詢直接從文件路徑使用的語法deltas3。“路徑”美元。”s3: / /…
關於PrestoDB /δ連接器的更多信息:
請注意,我們正在處理Trino(這裏就是包含當前分支359年Trino三角洲湖讀者)和雅典娜社區提供本地三角洲湖連接。
從權力BI本地讀取三角洲湖
我們還想給一個喊Gerhard Brueckl (github:gbrueckl繼續改善權力BI連接三角洲湖。三角洲的一部分連接器0.3.0,BI連接器包括在線/定期刷新PowerBI服務,支持三角洲湖時間旅行和分區消除使用分區模式的表。
討論
我們很興奮的迅速采用三角洲湖的工程和數據科學社區。如果你有興趣學習更多關於三角洲獨立或任何這樣的三角洲連接器,請查看以下資源:
- 三角洲的集成
- 三角洲用戶鬆弛
- 三角洲穀歌集團
- 三角洲YouTube頻道,我們也為三角洲核心主機雙周刊社區辦公時間,Flink /δ,轉眼間/δ,和更多!
學分
我們想要感謝下列貢獻者更新,doc變化,在三角洲獨立0.3.0和貢獻:亞曆克斯,Allison波蒂斯所寫,丹尼Lee Gerhard Brueckl Pawel Kubit,斯科特•Sandre Shixiong朱,王偉,Yann拜倫,陳散熱,gurunath。