AWS Glue:爬虫将时间戳误解为字符串。 GLUE ETL 意味着将字符串转换为时间戳,使它们为 NULL

AWS Glue: crawler misinterprets timestamps as strings. GLUE ETL meant to convert strings to timestamps makes them NULL

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

虽然我已经能够在 Athena 中成功创建爬虫并发现数据,但我对爬虫创建的数据类型有疑问。 datetimestamp 数据类型被读取为 string 数据类型。

我随后在 GLUE 中创建了一个 ETL 作业,使用爬虫创建的数据源作为输入,并在 Amazon S3[=32] 中使用目标 table =]

作为映射转换的一部分,我将日期和时间戳的数据类型从 string 转换为 timestamp,但不幸的是,ETL 将这些列类型转换为 NULLS。我曾考虑将分类器与 GROK 表达式一起使用,但后来决定将它们转换为 GLUE 中 ETL 的一部分。

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

我不知道你使用的时间戳格式是什么,所以我假设格式如下:

2018-05-30T12:22:07.000Z

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

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

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

 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}