尝试查询存储为字符串的日期之间的记录时 Athena 出错

问题描述 投票:0回答:1

在尝试查询存储为字符串的日期之间的记录时,我遇到了 Athena 问题。

我的 csv 数据集分布在目录中的多个文件中,有一个采用

quote_date
格式的
10/8/2024
列。 我创建了
prices
表,其中
quote_date
作为字符串(不是日期),否则该列将导致空 - 据我所知,因为字符串->日期转换需要 ISO 格式。

我想查询该列上日期之间的记录。

出于某种原因,这工作正常:

select
    customer_id,
    q_date,
    normalized_price
from (
    select *, date_parse(quote_date,'%m/%d/%Y') as q_date
    from prices
    where customer_id is not null
) as tbl
where
    customer_id = 435
order by q_date desc
#   customer_id   q_date                     normalized_price
1   435           2024-11-19 00:00:00.000    5.62
2   435           2024-11-19 00:00:00.000    5.54
3   435           2024-11-19 00:00:00.000    5.2
...

但由于某种原因,在 q_date 上添加过滤器会中断,并且意外地在

quote_date
列上添加过滤器(?!):

select
    customer_id,
    q_date,
    normalized_price
from (
    select *, date_parse(quote_date,'%m/%d/%Y') as q_date
    from prices
    where customer_id is not null
) as tbl
where
    customer_id = 435
  AND
    date(q_date) > date('2024-11-15')
order by q_date desc

INVALID_FUNCTION_ARGUMENT:格式无效:“QUOTE_DATE” 此查询针对“athena_dtn”数据库运行,除非查询限定。

检查数据,我在

quote_date
值中看不到任何格式错误/预期的字符串格式,所以我真的不知道会出现什么问题。

有什么建议吗?

sql string csv date amazon-athena
1个回答
0
投票

date
:

CAST(x AS date)
的别名。

它需要一个日期,而不是时间戳,你需要解析时间戳:

-- sample data
WITH dataset(q_date) as (
    values ('2024-11-19 00:00:00.000'),
           ('2024-11-18 01:00:00.000')
)

-- query
select date_parse(q_date, '%Y-%m-%d %T.%f')
from dataset
where date_parse(q_date, '%Y-%m-%d %T.%f') >= date '2024-11-19';
© www.soinside.com 2019 - 2024. All rights reserved.