首页 文章

AWS Glue Crawler - 单记录CSV

提问于
浏览
1

我有一堆文件以CSV格式存储在S3中(没有 Headers )但在很多情况下每个文件只有一个记录 . 例如:

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

当我运行crawler时,它会为每个文件分隔表创建 .

问题(S):

  • 如何强制爬虫使用单个(已创建的)表?

  • 我需要创建自定义分类器吗?如果我的字段名称是rId和ts,有人可以给我Grok文件示例吗?

谢谢

3 回答

  • 0

    我联系了AWS Support,详细信息如下:

    问题是由具有单个记录的文件引起的 . 默认情况下,Glue crawler使用LazySimpleSerde对CSV文件进行分类 . LazySimpleSerde需要至少一个换行符来识别CSV文件,这是它的限制 .

    解决此问题的正确途径是考虑使用Grok模式 .

    为了证实这一点,我已经测试了我的一些场景,包括您的数据和自定义模式 . 我创建了3个文件名为file1.csv,其中包含一条记录,file2.csv包含两条记录,file3.csv包含一条记录 . 另外,正确的Grok模式也应考虑使用$ ie

    %{QUOTEDSTRING:rid:string},%{NUMBER:ts:long}$
    
    • 我在所有文件上运行了没有任何自定义模式的爬虫,并创建了多个表 .

    • 我编辑了爬虫并添加了自定义模式并重新运行了同一个爬虫,但它仍然创建了多个表 .

    • 我创建了一个具有Grok模式的新爬虫并在file1和file2上运行它,它只创建了一个具有适当列的表 .

    • 我添加了file3并再次运行了爬虫,它只更新了同一个表,并且没有创建新表 .

    • 我已经使用S3中的分区测试了场景3和4(因为您可能有分区数据)并且仍然有一个表 .

    根据我的观察,似乎问题可能是由于爬虫缓存了旧的分类细节 . 所以我要求您创建一个新的爬虫并将其指向目录中的新数据库 .

  • 1

    我有同样的"issue" . 文档(Adding Classifiers to a Crawler)说:

    内置CSV分类器

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

  • 0

    您是否尝试设置“为每个S3路径创建单个架构” . 在爬虫配置中是如此?如果设置了此字段,则爬网程序不会创建新架构,而是更新现有架构 . 有关详细信息,请参阅链接 .

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

相关问题