AWS Athena 从 S3 的 GLUE Crawler 输入 csv 创建的表中返回零记录

Posted

技术标签:

【中文标题】AWS Athena 从 S3 的 GLUE Crawler 输入 csv 创建的表中返回零记录【英文标题】:AWS Athena Returning Zero Records from Tables Created from GLUE Crawler input csv from S3 【发布时间】:2017-11-13 14:41:44 【问题描述】:

第一部分:

我尝试在 s3 中加载的虚拟 csv 上运行胶水爬虫,它创建了一个表,但是当我尝试在 athena 中查看表并查询它时,它显示返回零记录。

但是 Athena 中 ELB 的演示数据运行良好。

第二部分(场景:)

假设我有一个 Excel 文件和数据字典,说明该文件中数据的存储方式和格式,我希望将这些数据转储到 AWS Redshift 中实现此目的的最佳方法是什么?

【问题讨论】:

使用爬虫读取的 csv 文件中的一些示例数据更新问题,并提及架构结构。不要只是简单地提到返回的 零记录 【参考方案1】:

我遇到了同样的问题。您需要将文件夹路径而不是真实文件名提供给爬虫并运行它。我尝试将文件夹名称提供给爬虫,它起作用了。希望这可以帮助。让我知道。谢谢,

【讨论】:

这对我有用。我遇到了同样的问题。但是,当我将每个数据放在自己的文件夹下并将 Crawler 指向父文件夹时,它就起作用了。我注意到的是,以这种方式创建的表的表名不包含文件格式的名称,而我之前的尝试却包含。这可以用作视觉标识符,以识别表格是否已正确读取。 这是可行的,桶中只有一个文件(例如 csv)。【参考方案2】:

我遇到了同样的问题。尝试在 s3 存储桶中为单个表创建单独的文件夹,而不是重新运行胶水爬虫。您将在胶水数据目录中获得一个与 s3 存储桶文件夹名称相同的新表。

【讨论】:

【参考方案3】:

删除爬虫 再次创建爬虫(只有一个 csv 文件在 s3 中不可用并运行爬虫) 重要提示 一个 CSV 文件运行它我们可以查看 Athena 中的记录。

【讨论】:

【参考方案4】:

我确实提供了 S3 文件夹路径而不是文件名,但仍然无法让 Athena 返回任何记录(“返回零记录”、“扫描数据:0KB”)。

原来问题在于输入文件(我的旋转日志文件从 Elastic Beanstalk 自动上传到 S3)以下划线 (_) 开头,例如_var_log_nginx_rotated_access.log1534237261.gz!显然这是不允许的。

【讨论】:

是的,这是一个正确的答案。 Glue Crawler 可以找到数据,但当文件以 _ 开头时,Athena 不起作用【参考方案5】:

s3桶/文件夹的结构很重要:

s3://<bucketname>/<data-folder>/
    /<type-1-[CSVs|Parquets etc]>/<files.[csv or parquet]>
    /<type-2-[CSVs|Parquets etc]>/<files.[csv or parquet]>
    ...
    /<type-N-[CSVs|Parquets etc]>/<files.[csv or parquet]>

并在 Glue Crawler 的“包含路径”中指定:

s3://<bucketname e.g my-s3-bucket-ewhbfhvf>/<data-folder e.g data>

【讨论】:

【参考方案6】:

解决方案:选择folder 的路径,即使在folder 中有很多files。这将生成一个表格并显示数据。

【讨论】:

【参考方案7】:

所以在很多这样的情况下,在 Glue Crawler 中使用 EXCLUDE PATTERN 对我有帮助。

这是肯定的,而不是直接将爬虫指向文件,我们应该将它指向目录,即使当我们没有得到任何记录时,排除模式也会来救援。 您将必须设计一些模式,通过该模式仅排除您想要抓取的文件并排除其余文件。 (建议这样做而不是为每个文件创建不同的目录,并且大多数时候在生产存储桶中,这样做是不可行的)

我在 S3 存储桶中有数据!有多个目录,每个目录内都有 snappy parquet 文件和 json 文件。 json 文件导致了问题。

所以我在包含许多目录的主目录和我给出的 EXCLUDE PATTERN 中运行了爬虫 - * / *.json

这一次,它没有为 json 文件创建任何表,我能够使用 Athena 看到表的记录。

供参考-https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html

【讨论】:

【参考方案8】:

将粘连爬虫指向 S3 文件夹,而不是实际文件。

【讨论】:

以上是关于AWS Athena 从 S3 的 GLUE Crawler 输入 csv 创建的表中返回零记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet

使用 AWS Glue Scala 查询 Athena(添加分区)

AWS Glue 和重复数据删除增量 CSV 文件

将 AWS Glue 作业迁移到 EC2

通过 AWS Glue Crawler 识别并存储在数据目录中的表的异常

我可以使用 Athena View 作为 AWS Glue 作业的来源吗?