无法使用Glue数据目录让分区正常工作

0

【以下的问题经过翻译处理】 我有一些上传到单个存储桶的S3文件。没有文件夹或其他内容,只是每小时1个文件上传到这个存储桶中。 我在这些文件上运行一个Glue ETL作业,进行一些转换,并将数据插入到不同存储桶中存储的Glue数据目录中。 这样,我可以使用Athena查询该Glue数据目录。

我想做的是将文件存储在使用分区的Data Catalog的S3文件夹中,格式为YEAR/MONTH/DAY。尽管源数据只是每小时上传的文件而没有分区,但我想在Data Catalog中将它们存储为分区。因此,在Glue ETL期间,我从文件中提取了YEAR,MONTH,DAY,并相应地在我的Data Catalog表中创建了列,并将它们标记为分区:

分区1 YEAR 分区2 MONTH 分区3 DAY

这些列的值是正确的,我已经验证过了。

创建分区后,我在表上运行了MSCK REPAIR TABLE命令,结果为"Query Ok."。

然后我运行了Glue ETL作业。当我查看S3存储桶时,我看不到创建的文件夹。我只看到常规的r-part文件。当我单击表模式时,它显示YEAR,MONTH,DAY列已标记为分区,但当我单击View Partitions时,它仅显示:

year month day 没有找到分区

我该怎么办?这些只是CSV文件。我无法控制将原始数据上传到S3的过程,它将仅在存储桶中存储每小时的文件。我可以控制ETL作业和Data Catalog。当我尝试在创建分区并运行MSCK REPAIR TABLE后查询时,没有返回数据。但是我可以进入Data Catalog存储桶并找到其中一个

profile picture
专家
已提问 10 个月前16 查看次数
1 回答
0

【以下的回答经过翻译处理】 我已经弄清楚了这个问题。我错过了一个步骤,需要将additionalOptions添加到我的sink中,如下所述: https://medium.com/analytics-vidhya/add-new-partitions-in-aws-glue-data-catalog-from-aws-glue-job-79b0442b17af

#参数“enableUpdateCatalog”告诉aws glue工作更新glue数据目录,因为创建新分区
additionalOptions = {"enableUpdateCatalog": True}
#定义分区键
additionalOptions["partitionKeys"] = ["year", "month","day"]

做了这个之后,分区(嵌套目录)被创建。

profile picture
专家
已回答 10 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则