Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 无法修复Amazon Athena中的分区_Amazon Web Services_Hive_Amazon Athena_Aws Glue - Fatal编程技术网

Amazon web services 无法修复Amazon Athena中的分区

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

我最近一直在从事一个项目,该项目涉及使用Glue管理服务在AmazonS3中抓取数据。这成功地创建了一个元存储,我可以在Glue控制台上看到它

我已经通过控制台手动解决了模式中的错误,例如字符串-->时间戳、BIGINT-->字符串等。分区似乎是从S3路径中的键自动创建的。i、 e.s3中对象的密钥类似于:

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