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/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码