使用 AWS Glue Crawler 指定 SerDe 序列化库

Lui*_*hys 9 amazon-web-services amazon-athena aws-glue aws-glue-data-catalog

每次我对现有数据运行胶水爬虫时,它都会将 Serde 序列化库更改为LazySimpleSerDe,这不能正确分类(例如,对于带逗号的引用字段)

在此输入图像描述

然后,我需要手动编辑 Glue Catalog 中的表格详细信息,将其更改为org.apache.hadoop.hive.serde2.OpenCSVSerde.

我尝试制作自己的 csv 分类器,但这没有帮助。

如何让爬虫为生成或更新的表指定特定的序列化库?

Woo*_*ody 8

目前您无法在 Glue Crawler 中指定 SerDe,但这里有一个解决方法......

\n
    \n
  1. 使用以下配置创建 Glue Crawler。

    \n

    启用“仅添加新列\xe2\x80\x99” - 这会在发现新列时添加新列,但不会删除或更改数据目录中现有列的类型

    \n

    启用“使用表\xe2\x80\x99 中的元数据更新所有新分区和现有分区” - 此选项继承元数据属性,例如其父表的分类、输入格式、输出格式、SerDe 信息和架构。对表中这些属​​性的任何更改都会传播到其分区。

    \n
  2. \n
  3. 运行爬网程序来创建表,它将创建一个包含“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”的表 - 将其编辑为“org.apache.hadoop.hive.serde2.OpenCSVSerde”。

    \n
  4. \n
  5. 重新运行爬虫。

    \n
  6. \n
  7. 如果在爬虫重新运行时添加新分区,它也将使用 \xe2\x80\x9corg.apache.hadoop.hive.serde2.OpenCSVSerde\xe2\x80\x9d 创建。

    \n
  8. \n
  9. 您现在应该有一个设置为 org.apache.hadoop.hive.serde2.OpenCSVSerde 并且不会重置的表。

    \n
  10. \n
\n

  • 谢谢你!就我而言,我还必须删除步骤 2 和步骤 3 之间的所有表字段,以便出于某种原因正确检测字段。 (2认同)
  • 我遇到了这个问题..源在 CSV 源文件中的所有文本中都有双引号。爬网程序为我提供了一个适当的表,但来自 Athena 和 Redshift 的查询显示字符串中的双引号。解决方法解决了问题,我可以编辑表并设置 Serde 类型,并且查询停止显示双引号。但我需要将其设为 Glue Crawler 的属性,因为该表是动态创建的。我的所有代码都是通过 Terraform 部署的。Glue 是否有解决方案,以便它能够创建具有正确格式的表格?(例如删除双引号!)。 (2认同)