尝试在 Redshift 中创建日期表

Posted

技术标签:

【中文标题】尝试在 Redshift 中创建日期表【英文标题】:trying to create a date table in Redshift 【发布时间】:2021-11-08 11:57:13 【问题描述】:

我正在尝试在 redshift 中创建一个包含以下列的日期表:

日期 年 月 月份名称 年月 月份名称年份

请注意,年份月份的格式为:'202001',月份名称年份的格式为:january2020 .创建后如何在表中插入数据?

感谢您的帮助..

【问题讨论】:

【参考方案1】:

坦率地说,创建日历表的最简单方法是在 Excel 中制作!

为每个日期创建一行,使用公式添加日、月、年、日数等列。您还可以添加布尔值来识别周末公共假期。您可以为当月的第一天和最后一天添加一列(例如,在给定日期之后查找一个月的最后一天)。

然后,将数据保存为 CSV 文件并将其导入 Redshift 表中。

是的,您可以使用 generate_series() 函数编写一些花哨的 SQL,该函数仅在 Redshift 中创建一个表,但编写起来可能会有些痛苦,并且在 Excel 中执行它可以让您有机会添加其他功能(例如公共假期)。

【讨论】:

【参考方案2】:

这在 Redshift 中相当简单。可以使用递归 CTE 来制作日期列表,并且可以使用一些简单的格式来获取您想要的字段。此示例将所有日期从 2020 年 1 月 1 日到今天。

with recursive dates(dt) as
( select '2020-01-01'::date as dt
  union all
  select dt + 1
  from dates d
  where d.dt <= current_date 
  )
 select dt, extract(year from dt) as year, extract(month from dt) as month,
    decode(month, 1, 'January', 2, 'February', 3, 'March', 4, 'April', 5, 'May', 6, 'June', 7, 'July', 8, 'August', 9, 'September', 10, 'October', 11, 'November', 12, 'December') as mname,
    year * 100 + month as yearmo, mname || year::text as monameyr
 from dates order by dt;

【讨论】:

以上是关于尝试在 Redshift 中创建日期表的主要内容,如果未能解决你的问题,请参考以下文章

生成带有日期和小时的时间序列并在 Amazon Redshift 中创建表

无法使用 ecto 在 redshift 中创建模式迁移表

为啥在redshift中创建表需要很多时间?

将 IntelliJ 连接到 Amazon Redshift

可以在 Redshift 中的特定目录中创建外部表吗?

在 Redshift UDF 中求和