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 中成功创建爬虫并发现数据,但我对爬虫创建的数据类型有疑问。 date
和 timestamp
数据类型被读取为 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}
我一直在使用 AWS Glue 按照教程进行一些快速分析 here
虽然我已经能够在 Athena 中成功创建爬虫并发现数据,但我对爬虫创建的数据类型有疑问。 date
和 timestamp
数据类型被读取为 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}