AWS Athena 从通过 GLUE Crawler 输入来自 S3 的 csv 创建的表返回零记录

问题描述 投票:0回答:10

第一部分:

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

但是 Athena 中的 ELB 演示数据工作正常。

第二部分(场景:)

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

amazon-web-services csv amazon-redshift amazon-athena aws-glue
10个回答
29
投票

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


11
投票

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


5
投票

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


4
投票

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

原来问题是输入文件(我的旋转日志文件从 Elastic Beanstalk 自动上传到 S3)以下划线 (

_
) 开头,例如
_var_log_nginx_rotated_access.log1534237261.gz
!显然这是不允许的。


3
投票

这对我有用:我需要将所有 CSV 移动到它们自己的文件夹中,仅将 Glue Crawler 指向父文件夹(对我来说是“csv/”)是不够的。

csv/allergies.csv -> fails

csv/allergies/allergies.csv -> succeeds

然后,我只是将 AWS Glue Crawler 指向 csv/,所有内容都得到了很好的解析。


2
投票

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>

1
投票

解决方案:即使在

folder
内有很多
folder
,也选择
files
的路径。这将生成一张表格并显示数据。


1
投票

因此,在许多此类情况下,在 Glue Crawler 中使用 EXCLUDE PATTERN 对我很有帮助。

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

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

所以我在包含许多目录的主目录上运行爬虫,并在我给出的排除模式中 - * / *.json

这次,它没有为 json 文件创建任何表,我可以使用 Athena 查看表的记录。

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


1
投票

将胶水爬虫指向 S3 文件夹而不是实际文件就可以了。


0
投票

我也遇到了同样的问题。我的爬虫指向根存储桶路径,其中有许多结构截然不同的目录。对我有用的是将额外的数据源位置添加到新数据的更具体路径中,并且它有效。

© www.soinside.com 2019 - 2024. All rights reserved.