三角洲湖雪花集成
實驗
這是一個實驗性的集成。謹慎使用。
一個增量表可以被雪花閱讀使用清單文件,這是一個文本文件包含的數據文件讀取列表查詢三角洲表。本文描述了如何設置一個三角洲湖雪花集成使用清單文件和查詢三角洲表。
建立了一個三角洲湖三角洲雪花集成和查詢表格
你建立了一個三角洲湖雪花集成使用以下步驟。
第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:配置雪花閱讀生成的體現
在你的雪花環境中運行以下命令。
定義一個外部表上的清單文件
定義一個外部表的雪花,你必須第一定義一個外部的階段my_staged_table
指向δ表。在雪花,運行以下。
創建或取代階段my_staged_tableurl=“< path-to-delta-table >”
取代< path-to-delta-table >
與三角洲的完整路徑表。使用這個階段,您可以定義一個表delta_manifest_table
manifest文件中指定讀取文件名如下:
創建或取代外部表delta_manifest_table(文件名VARCHAR作為split_part(價值:c1,' / ',- - - - - -1))與位置=@my_staged_table/_symlink_format_manifest/FILE_FORMAT=(類型=CSV)模式=”。*(/)清單”AUTO_REFRESH=真正的;
請注意
在這個查詢:
位置是清單目錄。
的
文件名
列包含文件的名稱(不是完整路徑)中定義清單。
定義一個外部表上鑲花的文件
您可以定義一個表my_parquet_data_table
讀取所有的拚花三角洲表中的文件。
創建或取代外部表my_parquet_data_table(idINT作為(價值:id::INT),部分INT作為(價值:部分::INT),…parquet_filenameVARCHAR作為split_part(元數據文件名美元,' / ',- - - - - -1))與位置=@my_staged_table/FILE_FORMAT=(類型=拚花)模式=”。*[/]-[^ /]*[]部分鑲花的AUTO_REFRESH=真正的;
請注意
在這個查詢:
位置是三角洲表路徑。
的
parquet_filename
列的名稱文件,其中包含表的每一行。
如果你的三角洲表分區,那麼您必須顯式地提取分區表定義中的值。例如,如果由一個整數列表分區命名部分
,你可以提取的值如下:
創建或取代外部表my_parquet_data_partitioned_table(idINT作為(價值:id::INT),部分INT作為(nullif(regexp_replace(元數據文件名美元,”。\ \ *部分= (. *)\ \ / . *”,' \ \ 1 '),“__HIVE_DEFAULT_PARTITION__”)::INT),…parquet_filenameVARCHAR作為split_part(元數據文件名美元,' / ',- - - - - -1),)與位置=@my_staged_partitioned_table/FILE_FORMAT=(類型=拚花)模式=”。*[/]-[^ /]*[]部分鑲花的AUTO_REFRESH=真正的;
使用正則表達式提取分區列的值部分
。
查詢三角洲表如表將產生不正確的結果,因為這鋪這個查詢將讀取所有鋪文件在這個表而不是隻有那些表的定義一致的快照。您可以使用清單表一致的快照數據。
三角洲的定義視圖得到正確的內容表使用清單表
隻讀行屬於中定義的一致的快照生成的表現,您可以應用一個過濾器,隻保留的鑲花表中的行來自清單表中定義的文件。
創建或取代視圖my_delta_table作為選擇id,部分,…從my_parquet_data_table在哪裏parquet_filename在(選擇文件名從δ- - - - - -清單- - - - - -表);
查詢這個視圖將為你提供一個一致的的差值表視圖。
限製
雪花集成在其行為有已知的限製。
數據一致性
每當三角洲湖產生更新的體現,它自動覆蓋現有的清單文件。因此,雪花總是看到一個一致的視圖的數據文件;它將所有的舊版本文件或所有新版本文件。然而,保證一致性的粒度取決於表分區。
分區表:所有的文件名字都寫在一個清單文件自動更新。在這種情況下,雪花會看到全表快照一致性。
分區表:一個清單文件分區在同一Hive-partitioning-style目錄結構與原始δ表。這意味著每個分區自動更新,雪花會看到每個分區的一致視圖而不是跨分區一致的視圖。此外,由於所有體現所有分區的不能一起更新,並發試圖生成體現可以導致不同的分區有不同版本的體現。
取決於您使用存儲係統對於三角洲的表,可以得到不正確的結果,當雪花並發查詢清單而manifest文件被重寫。缺乏原子覆蓋的文件,在文件係統實現一個清單文件可能暫時不可用。因此,使用體現謹慎如果他們的更新可能會配合查詢從雪花。