AWS Glue:爬网程序将时间戳误解为字符串。GLUE ETL 旨在将字符串转换为时间戳使它们为 NULL

Bal*_*nki 9 amazon-s3 amazon-web-services amazon-athena aws-glue

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

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

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

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

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

Tan*_*din 6

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

 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}
Run Code Online (Sandbox Code Playgroud)


j.b*_*ski 4

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

2018-05-30T12:22:07.000Z
Run Code Online (Sandbox Code Playgroud)

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

'timestamp.formats'='yyyy-MM-dd\'T\'HH:mm:ss.SSSZ'
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我能够直接使用正确的时间戳格式在 Athena 中创建外部表。但我想问题是如何让爬虫识别适当的“数据类型”并使结果可用于 Athena 中的分析。无论是使用grok表达式还是有ETL作业进行数据转换。 (3认同)