Amazon web services 无法修复Amazon Athena中的分区
我最近一直在从事一个项目,该项目涉及使用Glue管理服务在AmazonS3中抓取数据。这成功地创建了一个元存储,我可以在Glue控制台上看到它 我已经通过控制台手动解决了模式中的错误,例如字符串-->时间戳、BIGINT-->字符串等。分区似乎是从S3路径中的键自动创建的。i、 e.s3中对象的密钥类似于:Amazon web services 无法修复Amazon Athena中的分区,amazon-web-services,hive,amazon-athena,aws-glue,Amazon Web Services,Hive,Amazon Athena,Aws Glue,我最近一直在从事一个项目,该项目涉及使用Glue管理服务在AmazonS3中抓取数据。这成功地创建了一个元存储,我可以在Glue控制台上看到它 我已经通过控制台手动解决了模式中的错误,例如字符串-->时间戳、BIGINT-->字符串等。分区似乎是从S3路径中的键自动创建的。i、 e.s3中对象的密钥类似于: s3://mybucket/YYYMM/object.csv Glue通过键的YYYYMM(例如201711)部分成功地对数据进行分区 当我运行查询时,我得到以下错误 HIVE\u PART
s3://mybucket/YYYMM/object.csv
Glue通过键的YYYYMM(例如201711)部分成功地对数据进行分区
当我运行查询时,我得到以下错误
HIVE\u PARTITION\u SCHEMA\u不匹配
这表明,虽然表模式已经更新,但分区模式尚未更新
看看我找到的文件
具体地
有几种方法可以解决此问题。首先,如果数据是意外添加的,可以删除导致架构差异的数据文件,删除分区,然后重新抓取数据。其次,您可以删除单个分区,然后在Athena中运行MSCK修复,以使用表的模式重新创建分区。只有当您确信应用的模式将继续正确读取数据时,第二个选项才有效
因此,我尝试了第二种选择并运行
ALTER TABLE mydb.mytable DROP PARTITION (partition_0=201711), PARTITION (partition_0=201712)
MSCK REPAIR TABLE mydb.mytable
删除分区似乎是成功的,但运行修复表会产生
不在metastore中的分区:mytable:201711 mytable:201712
我无法得到任何数据。手动读取分区似乎也不起作用
e、 g
给出错误第2行:分区处缺少“列”(服务:amazonathena;状态代码:400;错误代码:invalidrequestexception;
任何帮助都将不胜感激如果以后有人遇到这个问题,我会在这个问题中找到问题的答案。 所以从
s3://mybucket/YYYMM/object.csv
发送至:
s3://mybucket/date=YYYMM/object.csv
然后跑
ALTER TABLE mydb.mytable DROP PARTITION (partition_0=201711), PARTITION (partition_0=201712)
MSCK REPAIR TABLE mydb.mytable
重新添加我丢失的分区。当您执行MSCK修复表时,它将在Athena GUI中列出分区中丢失的文件。您知道如何通过编程方式获取丢失文件的列表吗?@pitchblack408您可以在表上执行“显示分区”操作,并通过S3 Cli在两个不同的文件中执行列表操作,并在两个文件之间进行区分
ALTER TABLE mydb.mytable DROP PARTITION (partition_0=201711), PARTITION (partition_0=201712)
MSCK REPAIR TABLE mydb.mytable