三角洲湖雪花集成

重要的

有一个用于更新预览三角洲雪花集成不需要使用清单文件查询三角洲湖。请访问雪花的文档使用它。

你还可以使用以下指令查询三角洲湖使用manifest文件。

实验

这是一个实验性的集成。谨慎使用。

一个增量表可以被雪花阅读使用清单文件,这是一个文本文件包含的数据文件读取列表查询三角洲表。本文描述了如何设置一个三角洲湖雪花集成使用清单文件和查询三角洲表。

建立了一个三角洲湖三角洲雪花集成和查询表格

你建立了一个三角洲湖雪花集成使用以下步骤。

第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 /。换句话说,这个目录中的文件包含的数据文件的名称(也就是说,拼花文件)应读阅读三角洲表的快照。

请注意

我们建议您定义雪花的三角洲表中一个位置可以直接阅读。

步骤2:配置雪花阅读生成的体现

在你的雪花环境中运行以下命令。

定义一个外部表上的清单文件

定义一个外部表的雪花,你必须第一定义一个外部的阶段my_staged_table指向δ表。在雪花,运行以下。

创建取代阶段my_staged_tableurl=“< path-to-delta-table >”

取代< path-to-delta-table >与三角洲的完整路径表。使用这个阶段,您可以定义一个表delta_manifest_tablemanifest文件中指定读取文件名如下:

创建取代外部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(选择文件名δ- - - - - -清单- - - - - -);

查询这个视图将为你提供一个一致的的差值表视图。

步骤3:更新清单

当δ表中的数据更新,您必须重新生成体现使用下列方法:

  • 更新明确:所有的数据更新后,您可以运行生成操作更新清单。

  • 自动更新:您可以配置一个三角洲表,表上的所有写操作自动更新清单。启用自动模式,设置相应的表属性使用以下SQL命令。

    改变δ' <路径- - - - - -- - - - - -δ- - - - - -> 'TBLPROPERTIES(δ兼容性symlinkFormatManifest启用=真正的)

限制

雪花集成在其行为有已知的限制。

数据一致性

每当三角洲湖产生更新的体现,它自动覆盖现有的清单文件。因此,雪花总是看到一个一致的视图的数据文件;它将所有的旧版本文件或所有新版本文件。然而,保证一致性的粒度取决于表分区。

  • 分区表:所有的文件名字都写在一个清单文件自动更新。在这种情况下,雪花会看到全表快照一致性。

  • 分区表:一个清单文件分区在同一Hive-partitioning-style目录结构与原始δ表。这意味着每个分区自动更新,雪花会看到每个分区的一致视图而不是跨分区一致的视图。此外,由于所有体现所有分区的不能一起更新,并发试图生成体现可以导致不同的分区有不同版本的体现。

取决于您使用存储系统对于三角洲的表,可以得到不正确的结果,当雪花并发查询清单而manifest文件被重写。缺乏原子覆盖的文件,在文件系统实现一个清单文件可能暂时不可用。因此,使用体现谨慎如果他们的更新可能会配合查询从雪花。

性能

这是一个实验性的集成和其性能和可伸缩性特点尚未测试。

模式演化

三角洲湖支持模式演化和查询在三角洲表自动使用最新的模式无论在蜂巢metastore模式中定义的表。然而,雪花使用其表定义中定义的模式,并且不会与更新的模式,直到表定义查询更新为新模式。