微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS Glue - getSink() 在glue_context.purge_s3_path 之后抛出“没有这样的文件或目录”

如何解决AWS Glue - getSink() 在glue_context.purge_s3_path 之后抛出“没有这样的文件或目录”

我正在尝试清除胶水目录表的分区,然后使用 getSink 选项重新创建分区(类似于在数据库中截断/加载分区) 为了清除分区,我使用了保留期 = 0 的glueContext.purge_s3_path 选项。分区已成功清除。

            self._s3_path=s3://server1/main/transform/Account/local_segment/source_system=SAP/
            self._glue_context.purge_s3_path(
            self._s3_path,{"retentionPeriod": 0,"excludeStorageClasses": ()}
                )

这里 Catalog database = Account,Table = local_segment,Partition_key = source_system

但是,当我尝试在清除步骤后立即重新创建分区时,我收到来自 getSink writeFrame 的“调用 o180.pyWriteDynamicFrame 时发生错误。没有这样的文件或目录”。 如果我删除了清除部分,那么 getSink 工作正常并且能够创建分区并写入文件

我什至在清除和 getSink 之间尝试过“MSCK REPAIR TABLE”,但没有成功。

如果不存在(即从上一步中清除),是否应该 getSink 创建分区?

       target = self._glue_context.getSink(
            connection_type="s3",path=self._s3_path_prefix,enableupdateCatalog=True,updateBehavior="UPDATE_IN_DATABASE",partitionKeys=["source_system"]
        )
        target.setFormat("glueparquet")
        target.setCatalogInfo(
            catalogDatabase=f"{self._target_database}",catalogTableName=f"{self._target_table_name}"
        )
        target.writeFrame(self._dyn_frame)
        
        Where - 
        self._s3_path_prefix = s3://server1/main/transform/Account/local_segment/
        self._target_database = Account
        self._target_table_name = local_segment

错误信息:

调用 o180.pyWriteDynamicFrame 时出错。没有这样的文件或目录 's3://server1/main/transform/Account/local_segment/source_system=SAP/run-1620405230597-part-block-0-0-r-00000-snappy.parquet'

解决方法

尝试检查您是否在 s3 上拥有此对象的权限。我遇到了同样的错误,一旦我将对象配置为公开(仅用于测试),它就起作用了。因此,它可能是一个新对象,而您的进程可能无权访问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。