按照教程,我一直在与 AWS Glue 进行一些快速分析 here
虽然我能够成功创建爬网程序并在Athena中发现数据,但是我对爬网程序创建的数据类型却遇到了问题。 for
和In []:
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
答案 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}