轉眼間,Trino和雅典娜三角洲湖集成使用體現

重要的

轉眼間,Trino三角洲湖和雅典娜都有原生支持。支持如下:

  • 轉眼間版本0.269以上本地支持閱讀三角洲湖表。有關使用本機三角洲湖連接器,明白了三角洲湖連接器,轉眼間。轉眼間版本低於0.269在本文中,您可以使用manifest-based方法。

  • Trino373年版本以上本地支持閱讀和寫作三角洲湖表。有關使用本機三角洲湖連接器,明白了三角洲湖Trino連接器。Trino版本低於373年版本,您可以使用manifest-based方法在本文中詳細。

  • 雅典娜版本3以上本地支持閱讀三角洲湖表。有關使用本機三角洲湖連接器,明白了查詢三角洲湖表。雅典娜版本低於版本3,您可以使用manifest-based方法在本文中詳細。

轉眼間,Trino和雅典娜支持讀取外部表使用清單文件,這是一個文本文件包含的數據文件讀取列表查詢一個表。當一個外部表中定義的蜂巢metastore使用manifest文件,轉眼間,Trino,雅典娜可以使用文件的列表清單,而不是尋找文件目錄清單。本文描述了如何設置一個轉眼間,Trino,雅典娜三角洲湖三角洲表集成使用清單文件和查詢。

轉眼間,Trino或雅典娜三角洲湖三角洲表集成和查詢

你建立了一個迅速的、Trino或雅典娜三角洲湖集成使用以下步驟。

第1步:生成體現三角洲表使用Apache的火花

使用火花配置三角洲湖,運行下列命令在三角洲表位置< path-to-delta-table >:

生成symlink_format_manifestδ' <路徑- - - - - -- - - - - -δ- - - - - -> '
瓦爾deltaTable=DeltaTableforPath(<路徑- - - - - -- - - - - -δ- - - - - ->)deltaTable生成(“symlink_format_manifest”)
DeltaTabledeltaTable=DeltaTableforPath(<路徑- - - - - -- - - - - -δ- - - - - ->);deltaTable生成(“symlink_format_manifest”);
deltaTable=DeltaTableforPath(<路徑- - - - - -- - - - - -δ- - - - - ->)deltaTable生成(“symlink_format_manifest”)

看到生成一個清單文件獲取詳細信息。

生成命令生成manifest文件< path-to-delta-table > / _symlink_format_manifest /。換句話說,此目錄中的文件將包含數據文件的名稱(也就是說,拚花文件)應讀閱讀三角洲表的快照。

請注意

磚建議你定義三角洲表在一個位置,轉眼間,Trino或雅典娜直接閱讀。

步驟2:配置轉眼間,Trino或雅典娜閱讀生成的體現

  1. 定義一個新表在蜂房裏metastore連接到轉眼間,Trino或雅典娜使用格式SymlinkTextInputFormat和清單位置< path-to-delta-table > / _symlink_format_manifest /

    創建外部mytable(((col_name1col_datatype1,…))(分區通過(col_name2col_datatype2,…))格式SERDE“org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe”存儲作為INPUTFORMAT“org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat”OUTPUTFORMAT“org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat”位置“< path-to-delta-table > / _symlink_format_manifest /”——位置生成的清單

    SymlinkTextInputFormat配置轉眼間,Trino或雅典娜來計算文件分裂mytable通過閱讀清單文件,而不是使用一個目錄列表找到數據文件。取代mytable與外部表的名稱< path-to-delta-table >與三角洲絕對路徑表。

    重要的

    • mytable必須是相同的模式和有相同的分區δ表。

    • 的集合分區通過列必須有別於非分區列的集合。此外,您不能指定分區的列作為< select語句>

    • 你不能使用這個表定義Apache火花;可以用它隻有轉眼間,Trino,雅典娜。

    你所使用的工具運行的命令取決於Apache火花,轉眼間,Trino或雅典娜使用相同的蜂巢metastore。

    • 同樣metastore:如果兩個Apache火花,轉眼間,Trino或雅典娜使用相同的蜂巢metastore,您可以定義表使用Apache火花。

    • 不同metastores:如果Apache火花,轉眼間,Trino或雅典娜使用不同的metastores,您必須使用其他工具定義表。

      • 雅典娜:您可以定義外部表在雅典娜。

      • 轉眼間:轉眼間不支持語法創建外部存儲作為,因此您必須使用另一個工具(例如,火花或蜂巢)連接到同一個metastore轉眼間創建表。

  2. 如果δ表分區,運行MSCK修複mytable後生成體現迫使metastore(連接到轉眼間,Trino或雅典娜)發現分區。這是必要的,因為一個分區表的清單是本身在相同的目錄結構分區表。運行這個命令使用相同的工具用於創建表。此外,你應該運行這個命令:

    • 每一個清單後一代:新分區可能後立即可見的manifest文件已經更新。然而,這樣做過於頻繁會導致蜂巢metastore高負載。

    • 預計新的分區一樣頻繁:例如,如果一個表分區按日期,然後您可以運行修複後每一個午夜,在已經創建了新的分區表和相應的清單文件已經生成。

步驟3:更新清單

三角洲表中的數據更新時你必須重新生成體現使用下列方法:

  • 更新明確:所有的數據更新後,您可以運行生成操作更新清單。

  • 自動更新:您可以配置一個三角洲表,表上的所有寫操作自動更新清單。啟用自動模式,設置相應的表屬性使用以下SQL命令。

    改變δ' <路徑- - - - - -- - - - - -δ- - - - - -> 'TBLPROPERTIES(δ兼容性symlinkFormatManifest啟用=真正的)

    禁用自動模式,設置該屬性。此外,對於分區表,你必須運行MSCK修複確保metastore連接到轉眼間,Trino或雅典娜更新分區。

    請注意

    在分區表啟用自動模式後,每個寫操作更新隻體現相應的分區操作寫的。這個增量更新確保低的開銷清單一代寫操作。然而,這也意味著,如果其他分區中的體現是陳舊的,啟用自動模式不會自動修複它。因此,磚建議您顯式地運行生成之後立即更新體現對整個表啟用自動模式。

是否自動更新或顯式地取決於並發寫操作的性質在三角洲表和所需的數據一致性。例如,如果啟用了自動模式,並發寫操作導致並發覆蓋manifest文件。這樣無序寫道,manifest文件不能保證指向表的最新版本後,寫操作完成。並發寫預計,因此,如果你想避免陳腐的表現,你應該考慮明確預期的寫操作完成後更新清單。

限製

轉眼間,Trino和雅典娜集成已知的限製在其行為。

數據一致性

每當三角洲湖產生更新的體現,它自動覆蓋現有的清單文件。因此,轉眼間,Trino,雅典娜將永遠看到的一致視圖數據文件;它將所有的舊版本文件或所有新版本文件。然而,保證一致性的粒度取決於是否表分區。

  • 分區表:所有的文件名字都寫在一個清單文件自動更新。在這種情況下,轉眼間,Trino,雅典娜將全表快照一致性。

  • 分區表:一個清單文件分區在同一Hive-partitioning-style目錄結構與原始δ表。這意味著每個分區自動更新,轉眼間,Trino,雅典娜將每個分區的一致視圖而不是跨分區一致的視圖。此外,由於所有體現所有分區的不能一起更新,並發試圖生成體現可以導致不同的分區有不同版本的體現。在這種一致性保證數據變化是弱於閱讀的δ表與火花,它仍然比格式像拚花,因為他們不提供分區級的一致性。

取決於您使用存儲係統對於三角洲的表,可以得到不正確的結果在轉眼間,Trino或雅典娜並發查詢清單,清單文件被重寫。缺乏原子覆蓋的文件,在文件係統實現一個清單文件可能暫時不可用。因此,使用體現謹慎如果他們的更新可能會配合查詢從轉眼間,Trino或雅典娜。

性能

非常大量的文件可以傷害轉眼間的性能,Trino,雅典娜。因此磚建議你緊湊的文件表的生成體現。文件的數量不應該超過1000(為整個分區表或每個分區的分區表)。

模式演化

三角洲湖支持模式演化和查詢在三角洲表自動使用最新的模式無論在蜂巢metastore模式中定義的表。然而,轉眼間,Trino或雅典娜使用模式中定義的蜂巢metastore和不會查詢與更新的模式直到轉眼間所使用的表,Trino或雅典娜重新定義的更新模式。

加密的表

雅典娜不支持閱讀體現CSE-KMS加密的表。請參閱AWS文檔的最新信息。