AWS Glue未检测到分区(通过不同的Athena vs Glue方法创建)

时间:2019-06-25 11:01:06

标签: amazon-web-services apache-spark amazon-athena aws-glue

我在S3中使用不同来源创建了实木复合地板文件。它们具有相同的架构。 1是使用Athena CTAS创建的。另一个使用AWS Glue / Spark创建。

Glue创建的文件如下:

enter image description here

雅典娜CTAS的外观如下:

enter image description here

我尝试将丢失的分区中的文件复制到另一个文件夹,然后使用Glue搜寻器,Glue可以检测到。但是,当所有内容放在一起时,似乎无法检测到这些分区。这是为什么?我是否需要使用一种方法处理所有数据才能正常工作?

2 个答案:

答案 0 :(得分:1)

如果已将数据添加到新分区,则Glue应在架构匹配时检测到它。

您可以尝试使用Athena手动进行操作,看看是否可行。希望它至少会给您一个有用的错误。

ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-14', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_14_May_2016'
  PARTITION (dt = '2016-05-15', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_15_May_2016';

来源:https://docs.aws.amazon.com/athena/latest/ug/alter-table-add-partition.html

您还可以尝试加载和打印两个分区的架构,看看是否有问题?

没有更多细节,例如有关如何实际进行分区的示例,我认为我无法提供更多帮助。

您应该尝试提出一个更可重复的示例。

答案 1 :(得分:0)

好的,我发现了问题。 2个主要问题

  • 雅典娜输出bigint而火花输出int
  • 某些列的大小写不同,例如:countryname vs countryName

一个有用的技巧是使用每个分区的printSchema并进行比较。或检查AWS Glue数据目录表分区,然后查看其中的分区差异。