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