三角洲湖雪花集成
实验
这是一个实验性的集成。谨慎使用。
一个增量表可以被雪花阅读使用清单文件,这是一个文本文件包含的数据文件读取列表查询三角洲表。本文描述了如何设置一个三角洲湖雪花集成使用清单文件和查询三角洲表。
建立了一个三角洲湖三角洲雪花集成和查询表格
你建立了一个三角洲湖雪花集成使用以下步骤。
第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文件被重写。缺乏原子覆盖的文件,在文件系统实现一个清单文件可能暂时不可用。因此,使用体现谨慎如果他们的更新可能会配合查询从雪花。