光譜紅移三角洲湖集成
實驗
這是一個實驗性的集成。謹慎使用。
一個增量表可以通過光譜紅移閱讀使用清單文件,這是一個文本文件包含的數據文件讀取列表查詢三角洲表。本文描述了如何設置一個光譜紅移三角洲湖集成使用清單文件和查詢三角洲表。
建立一個光譜紅移湖集成和查詢δ表
你建立了一個紅移光譜三角洲湖集成使用以下步驟。
第1步:生成體現三角洲表使用Apache的火花
運行生成
在三角洲表操作的位置< path-to-delta-table >
:
生成symlink_format_manifest為表δ。' <路徑- - - - - -來- - - - - -δ- - - - - -表> '
瓦爾deltaTable=DeltaTable。forPath(<路徑- - - - - -來- - - - - -δ- - - - - -表>)deltaTable。生成(“symlink_format_manifest”)
DeltaTabledeltaTable=DeltaTable。forPath(<路徑- - - - - -來- - - - - -δ- - - - - -表>);deltaTable。生成(“symlink_format_manifest”);
deltaTable=DeltaTable。forPath(<路徑- - - - - -來- - - - - -δ- - - - - -表>)deltaTable。生成(“symlink_format_manifest”)
看到生成一個清單文件獲取詳細信息。
的生成
操作生成manifest文件< path-to-delta-table > / _symlink_format_manifest /
。換句話說,這個目錄中的文件包含的數據文件的名稱(也就是說,拚花文件)應讀閱讀三角洲表的快照。
請注意
我們建議您定義三角洲表的位置紅移譜可以直接閱讀。
步驟2:配置光譜紅移閱讀生成的體現
運行以下命令在您的光譜紅移的環境。
定義一個新的外部表使用的格式在光譜紅移
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
配置光譜紅移計算文件分裂mytable
通過閱讀清單文件,而不是使用一個目錄列表找到數據文件。取代mytable
與外部表的名稱< path-to-delta-table >
與三角洲絕對路徑表。重要的
mytable
必須是相同的模式和有相同的分區δ表。的集合
分區通過
列必須有別於非分區列的集合。此外,您不能指定分區的列作為< select語句>
。
你不能使用這個表定義Apache火花;可以用它隻有通過光譜紅移。
如果δ表分區,您必須添加分區明確的光譜紅移表。這是必要的,因為一個分區表的清單是本身在相同的目錄結構分區表。
每個分區的表,運行以下在光譜紅移,直接在光譜紅移,或使用AWS CLIData API:
改變表mytable。redshiftdeltatable添加如果不存在分區(col_name=col_value)位置' < path-to-delta-table > / _symlink_format_manifest / col_name = col_value '
這個步驟將為你提供一個一致的的差值表視圖。
步驟3:更新清單
當δ表中的數據更新,您必須重新生成體現使用下列方法:
更新明確:所有的數據更新後,您可以運行
生成
操作更新清單。自動更新:您可以配置一個三角洲表,表上的所有寫操作自動更新清單。啟用自動模式,設置相應的表屬性使用以下SQL命令。
改變表δ。' <路徑- - - - - -來- - - - - -δ- - - - - -表> '集TBLPROPERTIES(δ。兼容性。symlinkFormatManifest。啟用=真正的)
禁用自動模式,設置該屬性
假
。請注意
在分區表啟用自動模式後,每個寫操作更新隻體現相應的分區操作寫的。這個增量更新確保低的開銷清單一代寫操作。然而,這也意味著,如果其他分區中的體現是陳舊的,啟用自動模式不會自動修複它。因此,你應該顯式地運行
生成
之後立即更新體現對整個表啟用自動模式。
是否自動更新或顯式地取決於並發寫操作的性質在三角洲表和所需的數據一致性。例如,如果啟用了自動模式,並發寫操作導致並發覆蓋manifest文件。這樣無序寫道,manifest文件不能保證指向表的最新版本後,寫操作完成。並發寫預計,因此,如果你想避免陳腐的表現,你應該考慮明確預期的寫操作完成後更新清單。
此外,如果您的表分區,那麼您必須添加任何新的分區或刪除刪除分區遵循相同的過程在前麵的步驟中所述。
限製
光譜紅移集成在其行為有已知的限製。
數據一致性
每當三角洲湖產生更新的體現,它自動覆蓋現有的清單文件。因此,紅移譜總是看到一個一致的視圖的數據文件;它將所有的舊版本文件或所有新版本文件。然而,保證一致性的粒度取決於是否表分區。
分區表:所有的文件名字都寫在一個清單文件自動更新。在這種情況下光譜紅移會看到全表快照一致性。
分區表:一個清單文件分區在同一Hive-partitioning-style目錄結構與原始δ表。這意味著每個分區自動更新,和紅移譜會看到每個分區的一致視圖而不是跨分區一致的視圖。此外,由於所有體現所有分區的不能一起更新,並發試圖生成體現可以導致不同的分區有不同版本的體現。在這種一致性保證數據變化是弱於閱讀的δ表與火花,它仍然比格式像拚花,因為他們不提供分區級的一致性。
取決於您使用存儲係統對於三角洲的表,可以得到不正確的結果,當查詢清單並發光譜紅移,而manifest文件被重寫。缺乏原子覆蓋的文件,在文件係統實現一個清單文件可能暫時不可用。因此,使用體現謹慎如果他們的更新可能會配合查詢從光譜紅移。