转眼间,Trino和雅典娜三角洲湖集成使用体现

重要的

转眼间,Trino三角洲湖和雅典娜都有原生支持。支持如下:

  • 转眼间版本0.269以上本地支持阅读三角洲湖表。有关使用本机三角洲湖连接器,明白了三角洲湖连接器,转眼间。转眼间版本低于0.269在本文中,您可以使用manifest-based方法。

  • Trino373年版本以上本地支持阅读和写作三角洲湖表。有关使用本机三角洲湖连接器,明白了三角洲湖Trino连接器。Trino版本低于373年版本,您可以使用manifest-based方法在本文中详细。

  • 雅典娜版本3以上本地支持阅读三角洲湖表。有关使用本机三角洲湖连接器,明白了查询三角洲湖表。雅典娜版本低于版本3,您可以使用manifest-based方法在本文中详细。

转眼间,Trino和雅典娜支持读取外部表使用清单文件,这是一个文本文件包含的数据文件读取列表查询一个表。当一个外部表中定义的蜂巢metastore使用manifest文件,转眼间,Trino,雅典娜可以使用文件的列表清单,而不是寻找文件目录清单。本文描述了如何设置一个转眼间,Trino,雅典娜三角洲湖三角洲表集成使用清单文件和查询。

转眼间,Trino或雅典娜三角洲湖三角洲表集成和查询

你建立了一个迅速的、Trino或雅典娜三角洲湖集成使用以下步骤。

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

请注意

砖建议你定义三角洲表在一个位置,转眼间,Trino或雅典娜直接阅读。

步骤2:配置转眼间,Trino或雅典娜阅读生成的体现

  1. 定义一个新表在蜂房里metastore连接到转眼间,Trino或雅典娜使用格式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配置转眼间,Trino或雅典娜来计算文件分裂mytable通过阅读清单文件,而不是使用一个目录列表找到数据文件。取代mytable与外部表的名称< path-to-delta-table >与三角洲绝对路径表。

    重要的

    • mytable必须是相同的模式和有相同的分区δ表。

    • 的集合分区通过列必须有别于非分区列的集合。此外,您不能指定分区的列作为< select语句>

    • 你不能使用这个表定义Apache火花;可以用它只有转眼间,Trino,雅典娜。

    你所使用的工具运行的命令取决于Apache火花,转眼间,Trino或雅典娜使用相同的蜂巢metastore。

    • 同样metastore:如果两个Apache火花,转眼间,Trino或雅典娜使用相同的蜂巢metastore,您可以定义表使用Apache火花。

    • 不同metastores:如果Apache火花,转眼间,Trino或雅典娜使用不同的metastores,您必须使用其他工具定义表。

      • 雅典娜:您可以定义外部表在雅典娜。

      • 转眼间:转眼间不支持语法创建外部存储作为,因此您必须使用另一个工具(例如,火花或蜂巢)连接到同一个metastore转眼间创建表。

  2. 如果δ表分区,运行MSCK修复mytable后生成体现迫使metastore(连接到转眼间,Trino或雅典娜)发现分区。这是必要的,因为一个分区表的清单是本身在相同的目录结构分区表。运行这个命令使用相同的工具用于创建表。此外,你应该运行这个命令:

    • 每一个清单后一代:新分区可能后立即可见的manifest文件已经更新。然而,这样做过于频繁会导致蜂巢metastore高负载。

    • 预计新的分区一样频繁:例如,如果一个表分区按日期,然后您可以运行修复后每一个午夜,在已经创建了新的分区表和相应的清单文件已经生成。

步骤3:更新清单

三角洲表中的数据更新时你必须重新生成体现使用下列方法:

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

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

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

    禁用自动模式,设置该属性。此外,对于分区表,你必须运行MSCK修复确保metastore连接到转眼间,Trino或雅典娜更新分区。

    请注意

    在分区表启用自动模式后,每个写操作更新只体现相应的分区操作写的。这个增量更新确保低的开销清单一代写操作。然而,这也意味着,如果其他分区中的体现是陈旧的,启用自动模式不会自动修复它。因此,砖建议您显式地运行生成之后立即更新体现对整个表启用自动模式。

是否自动更新或显式地取决于并发写操作的性质在三角洲表和所需的数据一致性。例如,如果启用了自动模式,并发写操作导致并发覆盖manifest文件。这样无序写道,manifest文件不能保证指向表的最新版本后,写操作完成。并发写预计,因此,如果你想避免陈腐的表现,你应该考虑明确预期的写操作完成后更新清单。

限制

转眼间,Trino和雅典娜集成已知的限制在其行为。

数据一致性

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

  • 分区表:所有的文件名字都写在一个清单文件自动更新。在这种情况下,转眼间,Trino,雅典娜将全表快照一致性。

  • 分区表:一个清单文件分区在同一Hive-partitioning-style目录结构与原始δ表。这意味着每个分区自动更新,转眼间,Trino,雅典娜将每个分区的一致视图而不是跨分区一致的视图。此外,由于所有体现所有分区的不能一起更新,并发试图生成体现可以导致不同的分区有不同版本的体现。在这种一致性保证数据变化是弱于阅读的δ表与火花,它仍然比格式像拼花,因为他们不提供分区级的一致性。

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

性能

非常大量的文件可以伤害转眼间的性能,Trino,雅典娜。因此砖建议你紧凑的文件表的生成体现。文件的数量不应该超过1000(为整个分区表或每个分区的分区表)。

模式演化

三角洲湖支持模式演化和查询在三角洲表自动使用最新的模式无论在蜂巢metastore模式中定义的表。然而,转眼间,Trino或雅典娜使用模式中定义的蜂巢metastore和不会查询与更新的模式直到转眼间所使用的表,Trino或雅典娜重新定义的更新模式。

加密的表

雅典娜不支持阅读体现CSE-KMS加密的表。请参阅AWS文档的最新信息。