第一部分 :
我尝试在 s3 中加载的虚拟 csv 上运行胶水爬虫,它创建了一个表,但是当我尝试在 athena 中查看表并查询它时,它显示返回了零记录。
但是 Athena 中 ELB 的演示数据运行良好。
第二部分(场景:)
假设我有一个 excel 文件和数据字典,说明该文件中数据的存储方式和格式,我希望将这些数据转储到 AWS Redshift 中实现此目的的最佳方法是什么?
第一部分 :
我尝试在 s3 中加载的虚拟 csv 上运行胶水爬虫,它创建了一个表,但是当我尝试在 athena 中查看表并查询它时,它显示返回了零记录。
但是 Athena 中 ELB 的演示数据运行良好。
第二部分(场景:)
假设我有一个 excel 文件和数据字典,说明该文件中数据的存储方式和格式,我希望将这些数据转储到 AWS Redshift 中实现此目的的最佳方法是什么?
我遇到了同样的问题。您需要将文件夹路径而不是真实文件名提供给爬虫并运行它。我尝试将文件夹名称提供给爬虫,它起作用了。希望这可以帮助。让我知道。谢谢,
我遇到了同样的问题。尝试为 s3 存储桶中的单个表创建单独的文件夹,而不是重新运行胶水爬虫。您将在胶水数据目录中获得一个与 s3 存储桶文件夹名称同名的新表。
删除 Crawler 再次创建 Crawler(s3 中应该只有一个 csv 文件不可用并运行爬虫) 重要注意 一个 CSV 文件运行它我们可以查看 Athena 中的记录。
我确实提供了 S3 文件夹路径而不是文件名,但仍然无法让 Athena 返回任何记录(“返回零记录”、“扫描数据:0KB”)。
原来问题在于输入文件(我的旋转日志文件从 Elastic Beanstalk 自动上传到 S3)以下划线 ( _
) 开头,例如_var_log_nginx_rotated_access.log1534237261.gz
!显然这是不允许的。
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>
解决方法:选择路径,folder
即使folder
你里面有很多files
. 这将生成一个表格并显示数据。
因此,在许多此类情况下,在 Glue Crawler 中使用 EXCLUDE PATTERN 可以帮助我。
这是肯定的,而不是直接将爬虫指向文件,我们应该将它指向目录,即使在我们没有得到任何记录时这样做,排除模式也会来救援。您将必须设计一些模式,通过该模式仅排除您想要抓取的文件并排除其余文件。(建议这样做而不是为每个文件创建不同的目录,并且大多数时候在生产存储桶中,进行这样的更改是不可行的)
我在 S3 存储桶中有数据!有多个目录,每个目录内都有 snappy parquet 文件和 json 文件。json文件导致了这个问题。
所以我在包含许多目录的主目录和我给出的排除模式中运行了爬虫 - * / *.json
而这一次,它没有为 json 文件创建任何表,我能够使用 Athena 查看表的记录。
供参考 - https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html
将胶水爬虫指向 S3 文件夹而不是实际文件就可以了。