Amazon Redshift SQL语句编写指南

在Amazon Redshift中编写SQL语句

本教程展示如何编写Amazon Redshift SQL语句。由于这个主题庞大而复杂,我们从基础开始。本教程将向您展示如何:

  • 使用查询编辑器
  • 使用group by聚合行
  • 将日期转换为年和月
  • 将结果导出到CSV文件

什么是Amazon Redshift?

Amazon Redshift是某中心基于SQL的云数据仓库。它旨在处理大型数据集和复杂查询,非常适合数据仓库、商业智能、大数据分析、机器学习和提取-加载-转换工作流。

Redshift的组件包括:

  • 集群:围绕领导节点组织的计算节点,用于管理连接和协调查询
  • 切片:节点的划分,为高效的大规模并行处理分配内存、处理和磁盘空间资源
  • 数据分发方法:根据键值或跨每个节点均匀分配数据到节点
  • 列式存储:以垂直堆栈方式完成,以减少输入/输出(I/O)并提高存储效率
  • 执行引擎:支持SQL查询并规划获取和使用数据的最佳方式
  • Spectrum:一项Amazon Redshift服务,可以在不将数据带入Redshift环境的情况下查询某中心S3中的数据
  • 集成数据加载:使用各种某中心和第三方工具
  • 备份和恢复:增加弹性
  • 安全控制:身份和访问控制,为模式识别和后利用响应提供日志记录
  • 维护和监控:此完全托管服务的内在功能,减轻团队的持续管理负担

Redshift查询编辑器

要打开查询编辑器,请从集群屏幕单击编辑器。然后Redshift将要求您提供凭据以连接到数据库。一个不错的功能是有一个生成临时凭据的选项,因此您不必记住密码。拥有某中心AWS控制台的登录权限就足够了。

您在SQL语句这里编写。一次只允许一个语句,因为Redshift一次只能显示一组结果。要编写多个语句,请单击加号(+)添加附加选项卡。当您运行每个查询时,需要几秒钟,因为它提交作业然后运行它。因此,它不像您可能期望的其他产品那样即时。结果显示在底部,您可以在那里将其导出为CSV、TXT或HTML。您还可以对结果进行图表化。

获取表模式

在本教程中,我们使用一个天气数据表。这是塞浦路斯帕福斯20年的天气数据。它有四列:

  • dt_iso
  • temp
  • temp_min
  • temp_max

dt_dso是timestamp类型,是主键。Redshift的一个优点是您几乎可以以任何所需的格式加载日期,Redshift都能理解。然后Redshift提供to_char()函数来打印出您想要的任何日期部分,如小时、年、分钟等。

要查看表模式,请查询pg_table_def表。

SELECT *
FROM pg_table_def
WHERE tablename = 'paphos'
AND schemaname = 'public';

以下是模式:

schemaname,tablename,column,type,encoding,distkey,sortkey,notnull
public,paphos,dt_iso,timestamp without time zone,none,t,1,t
public,paphos,temp,real,none,f,0,f
public,paphos,temp_min,real,none,f,0,f
public,paphos,temp_max,real,none,f,0,f

聚合SQL语句

此查询计算5月至9月夏季月份每月的平均温度。注意:

  • to_char()提取您想要的任何日期部分,如YYYY年或MM月数字
  • 使用in()语句选择月份
  • order语句使用1,这意味着使用查询返回的第一列。这是输入列名的替代方法
  • 按年和月分组,因为我们希望计算年内月份的平均值[avg()]
  • 使用round()函数四舍五入到两位小数。否则Redshift会给出太多小数位
  • 与其他数据库一样,as语句允许我们为计算产生的列提供别名。没有它,列将没有描述性名称。这里我们称平均温度为aveTemp
select round(avg(temp),2) as aveTemp,
                 to_char(dt_iso,'YYYY') as year,
                 to_char(dt_iso,'MM') as month
                 from paphos where
                 month in ('05','06','07','08','09')
                 group by year, month
                 order by 1 desc

以下是结果。它显示了20年数据中最热的月份。我已截断显示以使其简短。例如,在20年中,2010年8月是最热的月份。我们按年然后按月分组,因为我们希望给出每日天气观测的年内月份。

avetemp year month
84.11 2010 8
83.12 2012 8
83.05 2012 7
82.9 2015 8
82.39 2017 7
82.04 2014 8
81.85 2007 7
81.73 2020 9
81.72 2013 8
81.72 2008 8
81.62 2000 7
81.61 2009 8
81.49 2017 8

我们使用结果右侧的按钮将数据导出为CSV格式。然后我们将其导入电子表格,以便更轻松地查看结果并为其添加颜色等。

以下是最热的年份。我们通过从聚合中删除月份来获得这一点。

select round(avg(temp),2) as aveTemp,
                 to_char(dt_iso,'YYYY') as year 
                                 from paphos 
                                                group by year
                 order by 1 desc

其他资源

有关更多类似本教程的资源,请探索以下内容:

  • 某机构机器学习与大数据博客
  • 某机构指南,包含15篇文章和教程
  • 如何将某中心S3数据导入Snowflake
  • 如何将某中心Glue连接到JDBC数据库
  • 某中心Braket量子计算:如何开始
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2025-10-15 11:01  CodeShare  阅读(6)  评论(0)    收藏  举报