我有多个具有不同列名的HUDI表,并在其上构建了一个视图来标准化列名。当从Athena读取此视图时,它返回正确的响应。但是,当使用SPARK读取同一视图时,使用spark.read.parquet(“〈〉”),它也返回软删除的记录。我理解HUDI表需要用spark.read.格式读取(“hudi”)但是由于这是一个关于它的视图,所以我不得不使用spark.read.parquet(“”)。有没有办法强制HUDI只保留表中最新的提交并抑制所有旧的提交?
我有多个具有不同列名的HUDI表,并在其上构建了一个视图来标准化列名。当从Athena读取此视图时,它返回正确的响应。但是,当使用SPARK读取同一视图时,使用spark.read.parquet(“〈〉”),它也返回软删除的记录。我理解HUDI表需要用spark.read.格式读取(“hudi”)但是由于这是一个关于它的视图,所以我不得不使用spark.read.parquet(“”)。有没有办法强制HUDI只保留表中最新的提交并抑制所有旧的提交?
1条答案
按热度按时间wn9m85ua1#
Athena视图是存储在元存储Glue中的一个虚拟表,在Spark中获得相同结果的最佳方法是使用AWS Glue作为spark会话的元存储/目录。为此,您可以使用this lib,它允许您使用AWS Glue作为Hive元存储,然后您可以使用
spark.read.table("<database name>.<view name>")
或通过SQL查询读取视图:尽量避免使用
spark.read.parquet("")
,因为它根本不使用hudi元数据,如果您对Glue有问题,可以使用Hive创建与在Athena中为spark创建的视图相同的视图。