AWS Glue-从Avro到实木复合地板-胶水作业从目录中获取空框架

时间:2019-03-24 19:05:54

标签: avro parquet amazon-athena aws-glue aws-glue-data-catalog

我正在使用AWS Glue爬网程序对大约170 GB的Avro数据进行爬网,以创建数据目录表。

avro数据中有几个不同的架构版本,但是搜寻器仍然设法将数据合并到一个表中(我已启用“分组依据数据兼容性和架构相似性-模式”)。

这是当事情变得有问题的时候。

我只能使用Athena对数据运行SELECT COUNT(*) FROM <DB>.<TABLE>查询-其他任何查询都会引发以下错误:

GENERIC_INTERNAL_ERROR: Unknown object inspector category: UNION

简短的Google检查使我相信,这与avro文件中的架构有关。

通常,这是我将精力集中在哪里,但是:之前,我已经能够执行此完全相同的过程(AVRO->搜寻器->胶水作业-> PARQUET),并且具有较小的Avro数据集(50GB)同样的问题(只能运行计数查询)。继续前进。

之前的转换工作大约花费了一个小时。现在,在170 GB数据上运行相同的作业时,该作业在一分钟之内完成,因为glueContext.create_dynamic_frame.from_catalog现在返回一个空帧-没有错误,没有任何错误。之所以如此,是因为我能够在作业使用的同一张表上的Athena中运行COUNT查询,并返回520M个对象。

有人知道可能是什么问题吗?

可能与之相关的几件事:

  • COUNT查询返回520M,但表属性中的recordCount表示有170M条记录。
  • 数据存储在300k .avro文件中,大小为2MB-30MB
  • 是的,爬网程序指向包含所有文件的文件夹,而不是文件(常见的爬网程序陷阱)。
  • 之前尝试使用较小的数据集(50 GB)的尝试100%成功-我可以抓取实木复合地板数据并使用Athena进行查询(测试了许多不同的查询,都可以正常工作)

1 个答案:

答案 0 :(得分:1)

我们有同样的问题,可以通过以下方法解决。

在我们的Avro模式中,有一条记录具有混合字段类型,即某些记录的类型为"type" : [ "null", "string" ],其他记录的类型为[ "null", "string" ]

将其手动更改为iOS13到处都可以,我们可以在雅典娜使用该表而没有任何问题。