AWS Glue搜寻器需要根据具有相同模式的许多文件创建一个表

时间:2019-01-23 17:33:48

标签: amazon-athena aws-glue

在S3中,我们有大量文件夹和文件,它们都位于一个特定的文件夹下,我们希望抓取所有CSV文件,然后从Athena的 one 表中查询它们。 CSV文件都具有相同的架构。问题在于搜寻器正在为每个文件生成一个表,而不是一个表。搜寻器配置具有一个复选框选项,用于“为每个S3路径创建一个架构”,但这似乎无济于事。

我需要什么吗?谢谢。

2 个答案:

答案 0 :(得分:0)

胶履带声称解决了许多问题,但实际上解决不了多少。如果您稍微超出了他们为您设计的范围,那么您就不走运了。可能有一种方法可以配置它以执行您想要的操作,但是以我的经验,尝试使Glue爬网程序执行与它不完全匹配的事情是不值得的。

听起来您对数据的架构是个好主意。在这种情况下,Glue爬行器也提供了很少的价值。您可能比Glue能够弄清楚的架构要好得多。

我建议您手动创建表,并编写一个一次性脚本,该脚本列出要包含在表中的S3上的所有分区位置,并生成ALTER TABLE ADD PARTITION … SQL或Glue API调用以添加这些分区到表。

要在添加新分区位置时使表保持最新状态,请查看以下答案以获取指导:https://stackoverflow.com/a/56439429/1109

答案 1 :(得分:0)

一种执行所需操作的方法是仅使用由搜寻器创建的一个表作为示例,并手动创建一个相似的表(在AWS Glue-> Tables-> Add表中) ,或在雅典娜本身中,使用

CREATE EXTERNAL TABLE `tablename`(
  `column1` string, 
  `column2` string, ...

以现有表为例,当您转到数据库时,您可以在Athena中看到用于创建该表的查询->从Glue数据目录中选择数据库,然后自动单击其中一个前面的3个点您选择作为示例的“由搜寻器表创建”,然后单击“生成创建表DDL”选项。它将为您生成一个大查询,并根据需要对其进行修改(我相信您主要需要查看LOCATION和TBLPROPERTIES零件)。

在Athena中运行此修改后的查询时,新表将出现在Glue数据目录中。但是它不会包含有关s3文件和分区的任何信息,并且搜寻器很可能不会为您更新元存储信息。因此,您可以在Athena中运行“ MSCK REPAIR TABLE表名; ”查询(效率不高,但对我有用),它将添加缺少的文件信息,在“结果”选项卡中,您将看到类似(当然,如果您在s3上使用分区):

Partitions not in metastore:    tablename:dt=2020-02-03 tablename:dt=2020-02-04 
Repair: Added partition to metastore tablename:dt=2020-02-03
Repair: Added partition to metastore tablename:dt=2020-02-04

之后,您应该可以运行Athena查询。