AWS Glue:搜寻器将时间戳误解为字符串。 GLUE ETL旨在将字符串转换为时间戳记使它们为NULL

时间:2018-08-27 03:51:47

标签: amazon-web-services amazon-s3 amazon-athena aws-glue

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

虽然我能够成功创建爬网程序并在Athena中发现数据,但是我对爬网程序创建的数据类型却遇到了问题。 forIn []: import itertools as it [m for m, n in it.product(z, a) if set(m) <= set(n)] Out[]: [[1, 2]] 数据类型被读取为date数据类型。

接下来,我在GLUE中使用爬虫创建的数据源作为输入并在 Amazon S3

中创建了目标表,从而在GLUE中创建了一个timestamp作业。

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

时间戳格式为NULLS

2 个答案:

答案 0 :(得分:2)

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

2018-05-30T12:22:07.000Z

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

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

答案 1 :(得分:1)

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

 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}