首页 文章

AWS Glue:crawler将时间戳误解为字符串 . GLUE ETL意味着将字符串转换为时间戳使它们成为NULL

提问于
浏览
0

按照教程here,我一直在玩 AWS Glue 进行一些快速分析

虽然我已经能够在Athena中成功创建爬虫并发现数据,但我遇到了爬虫创建的数据类型的问题 . datetimestamp 数据类型被读取为 string 数据类型 .

我通过使用爬虫作为输入创建的数据源和 Amazon S3 中的目标表在GLUE中创建 ETL 作业来实现此目的 .

作为映射转换的一部分,我将日期和时间戳的数据类型转换为 stringtimestamp 但不幸的是,ETL将这些列类型转换为 NULLS . 我已经考虑过使用带有 GROK 表达式的分类器,但后来决定将它们转换为GLUE中ETL的一部分 .

时间戳格式为 1/08/2010 6:15:00 PM

2 回答

  • 2

    以下是时间戳数据的内置分类器 . 正如您所看到的,您所拥有的数据与其中的任何数据都不匹配 . 您需要创建自定义分类器,然后将其添加到新的Crawler(更新现有的爬网程序不起作用)

    TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
    
     TZ (?:[PMCE][SD]T|UTC)
    
     DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
    
     DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
    
     DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
    
     DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}
    
     CISCOTIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
    
  • 0

    我不知道您使用的时间戳格式是什么,因此我假设格式如下:

    2018-05-30T12:22:07.000Z
    

    在这种情况下,您可以在表定义中设置serde参数,如下所示:

    'timestamp.formats'='yyyy-MM-dd\'T\'HH:mm:ss.SSSZ'
    

相关问题