AWS Glue - getSink() 在 glue_context.purge_s3_path 之后立即抛出"No such file or directory"



我正试图清除粘合目录表的一个分区,然后使用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": ()}
)

此处目录数据库=帐户,表=本地段,分区密钥=源系统

然而,当我试图在清除步骤之后立即重新创建分区时;调用o180.pyWriteDynamicFrame时出错;来自getSink writeFrame。如果我删除了清除部分,那么getSink工作正常,能够创建分区并写入文件。

我甚至尝试过";MSCK修复表";介于清除和getSink之间,但运气不佳。

如果不存在,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上拥有此对象的权限。我也遇到了同样的错误,一旦我将对象配置为公共对象(仅用于测试(,它就工作了。因此,它可能是一个新对象,您的进程可能无法访问。

相关内容

最新更新