AWS Glue爬网程序-单记录CSV

时间:2018-07-31 21:30:36

标签: amazon-web-services grok aws-glue

我有一堆以CSV格式(无标题)存储在S3中的文件,但在许多情况下,每个文件只有一个记录。例如:

“ 6ad0638e-e7d3-4c33-8271-5b3972c6155f”,1532653200000

当我运行搜寻器时,它会为每个文件分隔的表创建一个

问题:

  • 如何强制搜寻器使用单个(已创建)表?
  • 我需要创建自定义分类器吗?如果我的字段名称是rId和ts,有人可以给我提供Grok文件示例吗?

谢谢

3 个答案:

答案 0 :(得分:1)

我联系了AWS支持,这里是详细信息:

问题是由具有单个记录的文件引起的。默认情况下,Glue搜寻器使用LazySimpleSerde对CSV文件进行分类。 LazySimpleSerde需要至少一个换行符来标识CSV文件,这是其局限性。

解决此问题的正确方法是考虑使用Grok模式。

为了确认这一点,我最后用您的数据和自定义模式测试了一些方案。我已经创建了3个文件,其中一个文件名为file1.csv,两个记录为file2.csv,一个记录为file3.csv。另外,正确的Grok模式也应考虑用$即换行。

%{QUOTEDSTRING:rid:string},%{NUMBER:ts:long}$
  1. 我在所有文件上都运行了没有任何自定义模式的搜寻器,并创建了多个表。
  2. 我编辑了搜寻器,并添加了自定义模式并重新运行了相同的搜寻器,但是它仍然创建了多个表。
  3. 我用Grok模式创建了一个新的搜寻器,并在file1和file2上运行它,它只创建了一个具有适当列的表。
  4. 我添加了file3并再次运行搜寻器,它只更新了同一张表,没有创建新表。
  5. 我已经使用S3中的分区(可能已经分区了数据)测试了场景3和4,仍然有一张表。

根据我的观察,似乎该问题可能是由于搜寻器将较早的分类详细信息缓存。因此,我要求您创建一个新的搜寻器并将其指向目录中的新数据库。

答案 1 :(得分:0)

我有相同的“问题”。文档(Adding Classifiers to a Crawler)说:

内置CSV分类器

要被分类为CSV,表模式必须至少具有两列和两行数据。 如果有办法强迫它理解一行,那就太好了。

答案 2 :(得分:0)

您是否尝试设置“为每个S3路径创建一个架构”。在搜寻器配置中是否正确?如果设置了此字段,则搜寻器不会创建新的架构,而是更新现有的架构。 请参阅链接以获取更多详细信息。

https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-grouping-policy