我正在尝试按列对数据进行分区。但是,当我运行查询-Dspring.active.profiles=testing
时,它返回错误
不在元存储中的分区:city:countrycode = AFG city:countrycode = AGO city:countrycode = AIA city:countrycode = ALB city:countrycode = AND city:countrycode = ANT city:countrycode = ARE
我通过以下查询从Avro创建了表:
MSCK REPAIR TABLE mytable
我的分区看起来像s3:// mybucket / city / countrycode = ABC
答案 0 :(得分:1)
这是一个老问题,Athena 似乎对此添加了警告信息,但如果其他人错过了前几次,他们会尝试类似的方法......
这是 Athena 在您创建表时给出的消息:
<块引用>查询成功。如果您的表有分区,则需要加载这些分区才能查询数据。您可以加载所有分区或单独加载它们。如果使用 load all partitions (MSCK REPAIR TABLE) 命令,分区必须采用 Hive 可以理解的格式。了解详情。
您用于分区的代码似乎不适用于 Hive(我正在做类似的事情,通过分组代码进行分区)。因此,您需要为每个分区运行一个 MSCK REPAIR TABLE
,而不是 ALTER TABLE
(请参阅:https://docs.aws.amazon.com/athena/latest/ug/partitions.html)
ALTER TABLE city ADD PARTITION (CountryCode='ABC') location 's3://mybucket/city/ABC/' ;
...并且每次添加新的县代码桶时都必须运行它。
答案 1 :(得分:0)
您绝对需要在您所在的位置加一个斜杠: https://docs.aws.amazon.com/athena/latest/ug/create-table.html
也许也尝试对分区列PARTITIONED by (countrycode string)
使用小写字母。
您是尝试在Glue Catalog中还是通过Crawler手动添加分区?这个工作了吗?