我们有一个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"]"}