Amazon Athena 表创建问题

Posted

技术标签:

【中文标题】Amazon Athena 表创建问题【英文标题】:Amazon Athena table creation issue 【发布时间】:2020-03-19 04:04:33 【问题描述】:

我在 Athena 中有一个表,它以 S3 作为源。

其中一个表列“Col1”的数据类型为字符串。

Col1
2019-11-21T12:26:13.422Z
2019-11-21T17:12:49.812Z
2019-11-21T17:51:38.299Z

我希望将此列转换为timestamp 的数据类型。

我运行了以下查询:

SELECT
  from_iso8601_timestamp(col1) AS ABC
FROM "testtest"."layer2_keywords" 

然后我得到一个带有时间戳数据类型的列:

col1

    col1
1   2019-11-12 10:11:08.017 UTC
2   2019-11-21 09:19:58.937 UTC
3   2019-11-22 09:23:47.786 UTC

我想用这个表输出创建一个新表。

我尝试了以下查询:

CREATE TABLE NEW_TABLE AS
SLECT
  from_iso8601_timestamp(col1) AS ABC
FROM layer2_keywords

但是这个命令并没有创建一个新表。

它会抛出如下错误:

NOT_SUPPORTED:不支持的 Hive 类型:带时区的时间戳。在重试之前,您可能需要手动清理位置 's3://athena-query-results-layer2/XXXXXXXXXX/' 的数据。 Athena 不会删除您帐户中的数据。

谁能指导我如何从 AWS Athena 中的选择查询中获取一个新表以进行字符串到时间戳的转换?

我必须依赖 Athena,因为 Glue 爬虫和 Glue ETL 都没有将字符串转换为时间戳。

【问题讨论】:

【参考方案1】:

我得到了答案。

我使用了CREATE TABLE AS SELECT (CTAS)。

见:Use the Results of an Amazon Athena Query in Another Query

但是有没有像 GROK 表达式这样的方法可以在数据保存到 S3 之前使用?如果是,请任何人提供一步一步的过程来为这个特定问题在 Glue 中编写 GROK?

时间戳字符串

字符串:2019-11-21T12:26:13.422Z

【讨论】:

【参考方案2】:

你可以使用 CAST() 函数如下:

CREATE TABLE NEW_TABLE AS
SLECT
  CAST(from_iso8601_timestamp(col1) AS TIMESTAMP) AS ABC
FROM layer2_keywords

希望对你有帮助。

【讨论】:

以上是关于Amazon Athena 表创建问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon Athena 上为地图属性创建表

amazon athena 创建带分区的请求

如何从 Amazon Athena 查询镶木地板数据?

如何将带有 NULL 值的引用 CSV 读入 Amazon Athena

Amazon athena 无法读取 S3 Access 日志文件,Athena 选择查询为每一列返回空结果集

Amazon Athena - 在基本 SQL WHERE 查询中无法解析列