读取Athena表时,如何在AWS Glue作业中排除S3上的文件或文件夹路径



我们有一个AWS Glue作业,它试图从HUDI填充的Athena表中读取数据。不幸的是,我们遇到了一个与create_dynamic_frame.from_catalog试图从这些表中读取相关的错误。

调用o82.getDynamicFrame时出错。s3://bucket/folder/.houdie/2022083153536771.commit不是Parquet文件。预期尾部幻数[80,65,82,49],但发现[32,125,10,125]

这似乎是GitHub上的一个已知问题:https://github.com/apache/hudi/issues/5891

遗憾的是,没有提供解决方法。我们正在尝试查看是否可以分别排除create_dynamic_frame.from_catalog连接的additional_options中的.hoodie*.commit的文件夹或文件。不幸的是,无论是排除文件还是文件夹,我们都没有取得任何成功。注意:根目录中有.hoodie文件,还有一个包含.commit文件的.hoodie文件夹和其他文件。我们倾向于将它们全部排除在外。

根据AWS:

"除外条款":(可选(包含要排除的Unix样式glob模式的JSON列表的字符串。例如;["**.pdf"]";排除所有PDF文件。有关AWS Glue支持的glob语法的更多信息,请参阅包含和排除模式。

问题:如何从连接中排除文件和文件夹?

  • 文件夹

datasource0 = glueContext.create_dynamic_frame.from_catalog(database=args['ENV']+"_some_database", table_name="some_table", transformation_ctx="datasource_x1", additional_options={"exclusions": "[".hoodie/**"]"})

  • 文件

datasource0 = glueContext.create_dynamic_frame.from_catalog(database=args['ENV']+"_some_database", table_name="some_table", transformation_ctx="datasource_x1", additional_options={"exclusions": "["**.commit"]"})

原来尝试的{"exclusions": "["**.commit"]"}解决方案成功了。不幸的是,我没有足够关注,有多个表需要排除在外。在破解了所有的文件类型后,这里有两个有效的解决方案:

  • 排除文件夹

additional_options={"exclusions": "["s3://bucket/folder/.hoodie/*"]"}

  • 排除文件

additional_options={"exclusions": "["**.commit","**.inflight","**.properties"]"}

最新更新