无法修复amazon athena中的分区

jk9hmnmh  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(309)

我最近在做一个项目,这个项目涉及到使用glue托管服务在amazons3中爬行数据。这成功地创建了一个metastore,我可以在glue控制台上看到它。
我已经通过控制台手动解决了模式中的错误,例如string-->timestamp、bigint-->string等。一个分区似乎是从s3路径中的键自动创建的。i、 e.我对s3中对象的关键是: s3://mybucket/YYYMM/object.csv glue成功地按照密钥的yyymm(例如201711)部分对数据进行分区。
当我运行一个查询时,我得到以下错误 HIVE_PARTITION_SCHEMA_MISMATCH 这表明虽然表模式已经更新,但分区模式还没有更新
在我找到的文件里。。。https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#schema-同步
明确地
有几种方法可以解决这个问题。首先,如果数据是意外添加的,可以删除导致架构差异的数据文件,删除分区,然后重新对数据进行爬网。其次,可以删除单个分区,然后在athena中运行msck repair,使用表的模式重新创建分区。只有当您确信应用的模式将继续正确读取数据时,第二个选项才起作用。
所以我尝试了第二种选择然后跑了。

ALTER TABLE mydb.mytable DROP PARTITION (partition_0=201711), PARTITION (partition_0=201712)
MSCK REPAIR TABLE mydb.mytable

删除分区似乎是成功的,但是运行修复表会产生 Partitions not in metastore: mytable:201711 mytable:201712 我也无法得到任何数据。手动读取分区似乎也不起作用。
例如

ALTER TABLE mydb.mytable ADD
    PARTITION (partition_0=201711) LOCATION 's3://bucket/201711',

给出错误 line 2:2: missing 'column' at 'partition' (service: amazonathena; status code: 400; error code: invalidrequestexception; 任何帮助都将不胜感激

3yhwsihp

3yhwsihp1#

万一以后有人碰到这个问题,我就在这个问题上找到了问题的答案。https://stackoverflow.com/a/33895249/4537686
所以把我的钥匙的格式从 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

重新添加我丢失的分区。

相关问题