簡體   English   中英

Amazon Athena時間日期作為字符串列

[英]Amazon Athena time date as string column

Athena分區按年/月/日划分,並由GLUE導入為STRING列。因此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天之間的所有時間。

通過presto文檔,我發現date_parse是一種更簡單的方法。 以下是選擇current_date CONCAT concat(年,月,日)然后選擇date_parse

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

[ https://prestodb.io/docs/current/functions/datetime.html][1]

我通過創建最近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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM