Hive Amazon Athena时间日期作为字符串列

Hive Amazon Athena时间日期作为字符串列,hive,hiveql,presto,amazon-athena,Hive,Hiveql,Presto,Amazon Athena,Athena分区按年/月/日进行划分,并通过GLUE作为字符串列导入。因此,day是一个字符串类型。我的要求是从当前时间戳中提取日期,并与我的日期列/分区进行比较 SELECT * FROM "db1"."tbl1" WHERE year = cast(extract(year from (CURRENT_DATE - interval '7' day)) as varchar) AND month = lpad(cast(extract(month from (CURRENT_DATE -

Athena分区按年/月/日进行划分,并通过GLUE作为字符串列导入。因此,day是一个字符串类型。我的要求是从当前时间戳中提取日期,并与我的日期列/分区进行比较

SELECT *
FROM "db1"."tbl1"
WHERE year = cast(extract(year from (CURRENT_DATE - interval '7' day)) as varchar) 
AND month = lpad(cast(extract(month from (CURRENT_DATE - interval '7' day)) as varchar),2,'0') 
AND day = lpad(cast(extract(day from (CURRENT_DATE - interval '7' day)) as varchar),2,'0') 
limit 10

这是一天。我想要从现在到过去7天之间的所有天数。

我通过创建过去7天的序列并从这些值中提取年、月和日来实现这一点。我的Athena数据中的年/月/日列存储为整数,因此我不需要转换
EXTRACT
函数的结果,但我在这个答案中转换结果以匹配您的用例

-- there may be a more elegant approach, but this worked for me
-- create a CTE containing the last seven dates
WITH dates AS (
  SELECT
    date_add('day', n, current_date) AS date
  FROM (
    SELECT
      ROW_NUMBER() OVER ()-7 AS n
    FROM db1.tbl1
    LIMIT 7
  )
),

-- extract the year, month, and day for joining
date_parts AS (
  SELECT
    CAST(EXTRACT(YEAR FROM date) AS VARCHAR) AS year,
    CAST(EXTRACT(MONTH FROM date) AS VARCHAR) AS month,
    CAST(EXTRACT(DAY FROM date) AS VARCHAR) AS day
  FROM dates
)

-- return all results from the last seven days
SELECT 
  * 
FROM date_parts AS dp
  JOIN db1.tbl1 AS t1 ON dp.year = t1.year AND dp.month = t1.month AND dp.day = t1.day;

处理presto文档我认为
date\u parse
是一种更简单的方法。以下是步骤 选择当前日期 CONCAT CONCAT(年、月、日) 然后
date\u parse

cast(date_parse(concat(year, month, day), '%Y%m%d') as date) BETWEEN current_date - interval '7' day AND current_date
[