繁体   English   中英

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

[英]AWS Athena Returning Zero Records from Tables Created from GLUE Crawler input csv from S3

第一部分:

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

但是ELB在Athena中的demo数据是可以正常使用的。

第二部分(场景:)

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

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

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

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

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

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

解决方案:即使folder内有很多files也要选择folder路径。 这将生成一张表并显示数据。

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

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

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

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

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

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

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>

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

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

csv/allergies.csv -> fails

csv/allergies/allergies.csv -> succeeds

然后,我将 AWS Glue Crawler 指向 csv/,一切都被很好地解析出来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM