如何处理 AWS Athena 同一列中只有日期 (%m-%d-%Y) 和日期时间 ('%m-%d-%Y %H:%i') 记录的列?
How to deal with a column that has just date (%m-%d-%Y) and datetime ('%m-%d-%Y %H:%i') records in the same column in AWS Athena?
我正在尝试将字符串类型的日期列转换为日期类型。
我在 AWS Athena 中使用以下查询:
SELECT col0, col1, col2, date_parse(replace(col3, '/', '-'), '%m-%d-%Y') AS start_date
FROM "bucket"."table"
WHERE col3 <> ''
这适用于某些记录,因为某些日期的格式如下:12/08/2019
但对于其他格式如下的日期,它会失败:7/1/2019 0:06
其他一些日期的格式如下:2020/04/10 08:39
这些不同格式的日期存在于同一列中。在这里处理脏数据......我明白为什么我的查询失败了,因为我那里只有 '%m-%d-%Y'
格式。只是想知道我将如何处理这样的事情,以便它可以在一个查询中处理所有 3 种格式。
您可以 运行 像这样使用 Coalesce
和 try
的组合来完成各种组合。
this presto documentation page提供了各种日期时间格式。
SELECT
col0,
col1,
col2,
Coalesce(
try(date_parse(col3, '%m/%d/%Y')),
try(date_parse(col3, '%Y/%m/%d %H:%i')),
try(date_parse(col3, '%e/%c/%Y %k:%i'))
) AS start_date
FROM "bucket"."table"
WHERE col3 <> ''
我的直觉是使用 CASE WHEN col3 LIKE ...,trim 关闭定时风格的时间,使用正确的第二个 arg 格式调用日期解析一次。另外,如果你发现更多的异常,你可以WHEN更多的LIKE表达式。
我正在尝试将字符串类型的日期列转换为日期类型。
我在 AWS Athena 中使用以下查询:
SELECT col0, col1, col2, date_parse(replace(col3, '/', '-'), '%m-%d-%Y') AS start_date
FROM "bucket"."table"
WHERE col3 <> ''
这适用于某些记录,因为某些日期的格式如下:12/08/2019
但对于其他格式如下的日期,它会失败:7/1/2019 0:06
其他一些日期的格式如下:2020/04/10 08:39
这些不同格式的日期存在于同一列中。在这里处理脏数据......我明白为什么我的查询失败了,因为我那里只有 '%m-%d-%Y'
格式。只是想知道我将如何处理这样的事情,以便它可以在一个查询中处理所有 3 种格式。
您可以 运行 像这样使用 Coalesce
和 try
的组合来完成各种组合。
this presto documentation page提供了各种日期时间格式。
SELECT
col0,
col1,
col2,
Coalesce(
try(date_parse(col3, '%m/%d/%Y')),
try(date_parse(col3, '%Y/%m/%d %H:%i')),
try(date_parse(col3, '%e/%c/%Y %k:%i'))
) AS start_date
FROM "bucket"."table"
WHERE col3 <> ''
我的直觉是使用 CASE WHEN col3 LIKE ...,trim 关闭定时风格的时间,使用正确的第二个 arg 格式调用日期解析一次。另外,如果你发现更多的异常,你可以WHEN更多的LIKE表达式。