Amazon Redshift 预置数据仓库入门
如果您是首次接触 Amazon Redshift 的用户,我们建议您先阅读以下部分以帮助您使用预置集群。Amazon Redshift 的基本流程是创建预置资源,连接到 Amazon Redshift,加载示例数据,然后对数据运行查询。在本指南中,您可以选择从 Amazon Redshift 或 Amazon S3 存储桶加载示例数据。在 Amazon Redshift 文档中,会使用示例数据来演示功能。要开始使用 Redshift Serverless,请参阅 Amazon Redshift Serverless 数据仓库入门。
在您创建并登录 Amazon Redshift 预置集群控制台后,您可以创建和管理 Amazon Redshift 对象,包括集群、节点和数据库。您还可以运行查询、查看查询以及执行其它 SQL 数据定义语言(DDL,Data Definition Language)和数据操纵语言(DML,Data Manipulation Language)操作。
重要
您为本次练习预置的集群在真实环境中运行。只要集群运行,您的 AWS 账户就会产生费用。有关定价信息,请参阅 Amazon Redshift 定价页面
为避免产生不必要的费用,请在完成练习后删除集群。本章的最后部分说明了如何执行这些操作。
登录 AWS Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/
我们建议您首先进入预置集群控制面板,以便开始使用 Amazon Redshift 控制台。
根据您的配置,Amazon Redshift 预置集群控制台的导航窗格中会显示以下项目:
Redshift Serverless – 无需设置、优化和管理 Amazon Redshift 预置集群即可访问和分析数据。
预置集群控制面板 – 查看 AWS 区域中集群的列表,检查集群指标和查询概览,以了解指标数据(例如 CPU 利用率)和查询信息。这些可以帮助您确定指定时间范围内的性能数据是否异常。
集群 – 查看此 AWS 区域中的您的集群列表,选择一个集群开始查询,或执行与集群相关的操作。您还可以从此页面创建新集群。
查询编辑器 – 对 Amazon Redshift 集群上托管的数据库运行查询。我们建议改为使用查询编辑器 v2。
查询编辑器 v2 – Amazon Redshift 查询编辑器 v2 是一个单独的基于 Web 的 SQL 客户端应用程序,可在 Amazon Redshift 数据仓库上创作和运行查询。您可以在图表中可视化结果,并通过与团队中的其他人共享查询来进行协作。
查询和加载 – 获取用于参考或故障排除的信息,例如最近查询的列表和每个查询的 SQL 文本。
数据仓库 – 创建者账户管理员可以授权使用者账户访问数据共享,也可以选择不授权任何访问权限。要使用授权的数据共享,使用者账户管理员可以将数据共享与整个 AWS 账户或账户中的特定集群命名空间相关联。管理员还可以拒绝数据共享。
零 ETL 集成 – 管理集成,在支持的源中,该集成使得事务数据在写入之后在 Amazon Redshift 中可用。
IAM Identity Center 连接 – 配置 Amazon Redshift 与 IAM Identity Center 之间的连接。
配置 – 通过 Java 数据库连接 (JDBC) 和开放式数据库连接 (ODBC) 这两种连接将 SQL 客户端工具连接到 Amazon Redshift 集群。您还可以设置 Amazon Redshift 托管式 Virtual Private Cloud(VPC)端点。这样做会在一个基于包含集群的 Amazon VPC 服务的 VPC 与另一个运行客户端工具的 VPC 之间提供私有连接。
AWS 合作伙伴集成 – 创建与支持的 AWS 合作伙伴的集成。
顾问 – 获取有关您可以对 Amazon Redshift 集群进行的更改的具体建议,以确定优化的优先级。
AWS Marketplace – 获取有关其他工具或与 Amazon Redshift 一起使用的 AWS 服务的信息。
警报 – 针对集群指标创建警报,以查看指定时间段内的性能数据和跟踪指标。
事件 – 跟踪事件并获取有关事件发生日期、描述或事件来源等信息的报告。
新增功能 – 查看 Amazon Redshift 的新功能和产品更新。
在本教程中,您会执行以下步骤。
主题
注册 AWS
如果您还没有 AWS 账户 账户,请先注册一个。如果您已有账户,则可以跳过此先决条件步骤,并使用您已有的账户。
按照屏幕上的说明进行操作。
在注册时,将接到一通电话,要求使用电话键盘输入一个验证码。
当您注册 AWS 账户时,系统将会创建一个 AWS 账户根用户。根用户有权访问该账户中的所有 AWS 服务 和资源。作为安全最佳实践,请为用户分配管理访问权限,并且只使用根用户来执行需要根用户访问权限的任务。
确定防火墙规则
注意
本教程假设您的集群使用默认端口 5439,并可使用 Amazon Redshift 查询编辑器 v2 运行 SQL 命令。教程中并未详细介绍您的环境中可能需要的联网配置或 SQL 客户端设置。
在某些环境中,您可以在启动 Amazon Redshift 集群时指定端口。您还将在安全组中创建一个入站入口规则,以允许通过该端口访问您的集群。
如果您的客户端计算机位于防火墙后面,请确保您知道可用的开放端口。通过此开放端口,您可以从 SQL 客户端工具连接到集群并运行查询。如果您不知道此开放端口,则应与了解您网络防火墙规则的人员合作,以在您的防火墙中确定一个开放端口。
虽然 Amazon Redshift 默认使用端口 5439,但如果您的防火墙中未打开该端口,则无法建立连接。创建了 Amazon Redshift 集群后,则不能再更改其端口号。因此,确保指定一个在启动过程中可在您的环境中工作的开放端口。
步骤 1:创建示例 Amazon Redshift 集群
在本教程中,您将了解创建具有一个数据库的 Amazon Redshift 集群的流程。然后,您将数据集从 Amazon S3 加载到数据库的表中。您可以使用该示例集群评估 Amazon Redshift 服务。
在开始设置 Amazon Redshift 集群之前,请确保您已满足注册 AWS 和确定防火墙规则中的所有必要先决条件。
对于任何访问其它 AWS 资源上的数据的操作,您的集群需要具有权限才能代表您访问该资源和该资源上的数据。例如,使用 SQL COPY 命令从 Amazon Simple Storage Service(Amazon S3)加载数据。您通过使用 AWS Identity and Access Management(IAM)提供这些权限。您可以通过自己创建 IAM 角色并将角色附加到集群来执行此操作。有关凭证和访问权限的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的凭证和访问权限。
要创建 Amazon Redshift 集群
-
登录 AWS Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/
。 重要
如果您使用 IAM 用户凭证,请确保您具备执行集群操作所需的权限。有关更多信息,请参阅《Amazon Redshift 管理指南》中的 Amazon Redshift 中的安全性。
-
在 AWS 控制台上,选择要在其中创建集群的 AWS 区域。
-
在导航菜单上,选择集群,然后选择创建集群。此时将显示创建集群页面。
-
在集群配置部分中,指定集群标识符、节点类型和节点的值:
-
集群标识符:在此教程中输入
examplecluster
。此标识符必须是唯一的。标识符必须在 1-63 个字符之间,使用有效字符 a—z(仅小写)和 -(连字符)。 -
选择以下方法之一以调整集群的大小:
注意
以下步骤假定 AWS 区域支持 RA3 节点类型。有关支持 RA3 节点类型的 AWS 区域的列表,请参阅《Amazon Redshift 管理指南》中的 RA3 节点类型概览。要详细了解每个节点类型和大小的节点规范,请参阅节点类型详细信息。
-
如果您不知道要将集群调整到多大,请选择帮我选择。执行此操作将打开大小调整计算器,该计算器将询问您有关计划存储在数据仓库中的数据的大小和查询特性的问题。
如果您知道集群所需的大小(即节点类型和节点数),请选择 I'll choose(我会选择)。然后选择 Node Type(节点类型)和 Nodes(节点)数量来确定集群规模。
对于本教程,请为节点类型选择 ra3.4xlarge,为节点数选择 2。
如果可以选择可用区配置,请选择单可用区。
要使用 Amazon Redshift 提供的示例数据集,在示例数据中,选择加载示例数据。Amazon Redshift 会将示例数据集 Tickit 加载到默认的
dev
数据库和public
schema。
-
-
-
在数据库配置部分中,为管理员用户名指定值。对于管理员密码,从以下选项中进行选择:
-
生成密码 – 使用 Amazon Redshift 生成的密码。
-
手动添加管理员密码 – 使用您自己的密码。
-
管理 AWS Secrets Manager 中的管理员凭证 – Amazon Redshift 使用 AWS Secrets Manager 生成和管理您的管理员密码。使用 AWS Secrets Manager 生成和管理您密码的密钥会产生一定的费用。有关 AWS Secrets Manager 定价的信息,请参阅 AWS Secrets Manager 定价
。
在本教程中,使用以下值:
管理员用户名:输入
awsuser
。管理员用户密码:输入密码的值。
-
-
在本教程中,创建 IAM 角色并将其设置为集群的默认角色,如下所述。一个集群只能有一个默认的 IAM 角色集。
在集群权限下,为管理 IAM 角色选择创建 IAM 角色。
为 IAM 角色指定一个 Amazon S3 桶,以便通过以下方法访问:
选择无附加 Amazon S3 桶以允许创建的 IAM 角色仅访问名为
redshift
的 Amazon S3 桶。选择任何 Amazon S3 桶以允许创建的 IAM 角色访问所有 Amazon S3 桶。
选择特定 Amazon S3 桶以便为创建的 IAM 角色指定一个或多个 Amazon S3 桶以供访问。然后从表中选择一个或多个 Amazon S3 桶。
选择创建 IAM 角色作为默认角色。Amazon Redshift 会自动创建 IAM 角色并将其设置为集群的默认角色。
由于您从控制台创建了 IAM 角色,因此它具有
AmazonRedshiftAllCommandsFullAccess
附加策略。这允许 Amazon Redshift 复制、加载、查询和分析 IAM 账户中 Amazon 资源的数据。
有关如何管理集群的默认 IAM 角色的信息,请参阅《Amazon Redshift 管理指南》中的创建一个 IAM 角色作为 Amazon Redshift 的默认角色。
-
(可选)在其他配置部分,关闭使用默认值以修改网络和安全、数据库配置、维护、监控和备份设置。
在有些情况下,您可以使用加载示例数据选项创建集群并希望启用增强型 Amazon VPC 路由。如果是这样,Virtual Private Cloud (VPC) 中的集群需要访问 Amazon S3 端点才能加载数据。
为使集群可公开访问,您可以执行以下两项操作之一。您可以在 VPC 中配置网络地址转换 (NAT) 地址,以便集群访问互联网。或者,您可以在 VPC 中配置 Amazon S3 VPC 端点。有关增强型 Amazon VPC 路由的更多信息,请参阅《Amazon Redshift 管理指南》中的增强型 Amazon VPC 路由。
-
选择创建集群。在集群页面上,等待您的集群创建并处于
Available
状态。
步骤 2:为 SQL 客户端配置入站规则
注意
建议您跳过此步骤,使用 Amazon Redshift 查询编辑器 v2 访问您的集群。
在本教程后面部分中,您将从基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 内访问集群。但是,如果您从防火墙外部使用 SQL 客户端来访问集群,请确保授予入站访问权限。
检查防火墙并授予对集群的入站访问权限
如果需要从防火墙外部访问集群,请检查防火墙规则。例如,您的客户端可以是 Amazon Elastic Compute Cloud (Amazon EC2) 实例或外部计算机。
有关防火墙规则的更多信息,请参阅《Amazon EC2 用户指南》中的安全组规则。
要从 Amazon EC2 外部客户端进行访问,请向附加到集群的安全组添加一个允许入站流量的入口规则。您可以在 Amazon EC2 控制台中添加 Amazon EC2 安全组规则。例如,CIDR/IP 192.0.2.0/24 允许该 IP 地址范围内的客户端连接到您的集群。找到适合您环境的正确 CIDR/IP。
步骤 3:授予对 SQL 客户端的访问权限并运行查询
对于 SQL 客户端,要查询 Amazon Redshift 集群托管的数据库,您有多种选择:其中包括:
连接到您的集群,然后使用 Amazon Redshift 查询编辑器 v2 运行查询。
如果您使用查询编辑器 v2,则无需下载和设置 SQL 客户端应用程序。您可以从 Amazon Redshift 控制台启动 Amazon Redshift 查询编辑器 v2。
使用 RSQL 连接到您的集群。有关更多信息,请参阅《Amazon Redshift 管理指南》中的 使用 Amazon Redshift RSQL 连接。
-
通过 SQL 客户端工具(如 SQL Workbench/J)连接到您的集群。有关更多信息,请参阅《Amazon Redshift 管理指南》中的使用 SQL Workbench/J 连接到集群。
本教程使用 Amazon Redshift 查询编辑器 v2 作为一种简单的方法,在由 Amazon Redshift 集群托管的数据库上运行查询。创建集群后,您可以立即运行查询。有关使用 Amazon Redshift 查询编辑器 v2 时注意事项的详细信息,请参阅《Amazon Redshift 管理指南》中的使用查询编辑器 v2 时的注意事项。
授予对查询编辑器 v2 的访问权限
管理员第一次为您的 AWS 账户 配置查询编辑器 v2 时,他们会选择用于加密查询编辑器 v2 资源的 AWS KMS key。Amazon Redshift 查询编辑器 v2 资源包括保存的查询、笔记本和图表。默认情况下,AWS 拥有的密钥用于加密资源。或者,管理员可在配置页面中为密钥选择 Amazon 资源名称(ARN)来使用客户托管密钥。配置账户后,AWS KMS 加密设置无法更改。有关更多信息,请参阅《Amazon Redshift 管理指南》中的配置您的 AWS 账户。
如要访问查询编辑器 v2,您需要相应权限。管理员可将 Amazon Redshift 查询编辑器 v2 的 AWS 托管式策略之一附加到 IAM 角色或用户,以授予权限。这些 AWS 托管式策略使用不同的选项编写,可控制标记资源允许共享查询的方式。您可以使用 IAM 控制台 (https://console.aws.amazon.com/iam/
您还可以根据提供的托管式策略中允许和拒绝的权限创建您自己的策略。如果您使用 IAM 控制台策略编辑器创建自己的策略,请选择 SQL Workbench 作为您在可视化编辑器中创建策略的服务。查询编辑器 v2 使用可视化编辑器和 IAM policy simulator 中的服务名称 AWS SQL Workbench。
有关更多信息,请参阅《Amazon Redshift 管理指南》中的 使用查询编辑器 v2。
步骤 4:将数据从 Amazon S3 加载到 Amazon Redshift
创建集群后,您可以将数据从 Amazon S3 加载到数据库表。您可以通过多种方法从 Amazon S3 加载数据。
您可以使用 SQL 客户端运行 SQL CREATE TABLE 命令在数据库中创建表,然后使用 SQL COPY 命令从 Amazon S3 加载数据。Amazon Redshift 查询编辑器 v2 是一个 SQL 客户端。
您可以使用 Amazon Redshift 查询编辑器 v2 加载向导。
本教程首先演示如何使用 Amazon Redshift 查询编辑器 v2 运行 SQL 命令来创建表和复制数据。从 Amazon Redshift 控制台导航窗格启动查询编辑器 v2。在查询编辑器 v2 中,使用管理员用户 awsuser
,创建与 examplecluster
集群和名为 dev
的数据库的连接。对于本教程,在创建连接时,请选择使用数据库用户名的临时凭证。有关使用 Amazon Redshift 查询编辑器 v2 的详细信息,请参阅《Amazon Redshift 管理指南》中的连接到 Amazon Redshift 数据库。
使用 SQL 命令从 Amazon S3 加载数据
在查询编辑器 v2 查询编辑器窗格上,确认您已连接到 examplecluster
集群和 dev
数据库。接下来,在数据库中创建一些表,然后将数据上传到表中。对于本教程,您加载的数据存储在一个可从多个 AWS 区域访问的 Amazon S3 存储桶中。
以下过程将会创建表并从公共 Amazon S3 存储桶加载数据。
使用 Amazon Redshift 查询编辑器 v2 复制并运行以下 create table 语句,以在 dev
数据库的 public
架构中创建表。有关语法的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的 CREATE TABLE。
使用 SQL 客户端(例如查询编辑器 v2)创建和加载数据
-
输入以下 SQL 命令以 CREATE
sales
表。drop table if exists sales;
create table sales( salesid integer not null, listid integer not null distkey, sellerid integer not null, buyerid integer not null, eventid integer not null, dateid smallint not null sortkey, qtysold smallint not null, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp);
-
输入以下 SQL 命令以 CREATE
date
表。drop table if exists date;
create table date( dateid smallint not null distkey sortkey, caldate date not null, day character(3) not null, week smallint not null, month character(5) not null, qtr character(5) not null, year smallint not null, holiday boolean default('N'));
-
使用 COPY 命令从 Amazon S3 中加载
sales
表注意
我们建议使用 COPY 命令将大型数据集从 Amazon S3 加载到 Amazon Redshift 中。有关 COPY 语法的更多信息,请参阅《Amazon Redshift 数据库开发人员指南中的 COPY。
要加载示例数据,为您的集群提供代表您访问 Amazon S3 的身份验证。如果您在创建集群时选择了创建 IAM 角色作为默认角色,就可以通过引用所创建并设置为集群
default
的 IAM 角色来提供身份验证。使用以下 SQL 命令加载
sales
表。您可以选择从 Amazon S3 存储桶下载并查看sales
表的源数据。。 COPY sales FROM 's3://redshift-downloads/tickit/sales_tab.txt' DELIMITER '\t' TIMEFORMAT 'MM/DD/YYYY HH:MI:SS' REGION 'us-east-1' IAM_ROLE default;
-
使用以下 SQL 命令加载
date
表。您可以选择从 Amazon S3 存储桶下载并查看date
表的源数据。。 COPY date FROM 's3://redshift-downloads/tickit/date2008_pipe.txt' DELIMITER '|' REGION 'us-east-1' IAM_ROLE default;
使用查询编辑器 v2 从 Amazon S3 加载数据
使用加载数据向导时,查询编辑器 v2 可简化数据的加载。在查询编辑器 v2 加载数据向导中生成和使用的 COPY 命令,支持从 Amazon S3 加载数据的 COPY 命令语法可使用的多个参数。有关 COPY 命令及其用于从 Amazon S3 中复制加载的选项的信息,请参阅《Amazon Redshift 数据库开发人员指南》中的 Amazon Simple Storage Service 中的 COPY 命令。
要将您自己的数据从 Amazon S3 加载到 Amazon Redshift,Amazon Redshift 需要一个 IAM 角色,该角色具有从指定的 Amazon S3 桶加载数据所需的权限。
对于本教程,首先打开 Amazon Redshift 查询编辑器 v2 并连接到数据库。接下来,创建包含已加载数据的表。然后,将您自己的数据从 Amazon S3 加载到 Amazon Redshift。有关使用查询编辑器 v2 的更多信息,请参阅《Amazon Redshift 管理指南》中的将数据加载到数据库。
在集群中创建 TICKIT 数据
您可以通过以下方式创建一组完整的 TICKIT 表,并将数据加载到集群中:
在 Amazon Redshift 控制台中创建集群时,您可以选择同时加载示例 TICKIT 数据。在 Amazon Redshift 控制台上,依次选择集群和创建集群。在示例数据部分,选择加载示例数据,在集群创建过程中,Amazon Redshift 自动将其示例数据集加载到您的 Amazon Redshift 集群
dev
数据库。使用 Amazon Redshift 查询编辑器 v2,您可以将 TICKIT 数据加载到名为 sample_data_dev 的示例数据库。导航到 sample_data_dev 数据库,然后导航到 tickit,从上下文菜单中选择打开示例笔记本。Amazon Redshift 查询编辑器 v2 创建示例数据库以及名为 tickit-sample-notebook 的示例笔记本。您可以运行此笔记本来查询示例数据库中的数据。
要查看有关 TICKIT 数据的详细信息,请参阅《Amazon Redshift 数据库开发人员指南》中的示例数据库。
步骤 5:使用查询编辑器尝试进行示例查询
要设置和使用 Amazon Redshift 查询编辑器 v2 来查询数据库,请参阅《Amazon Redshift 管理指南》中的使用查询编辑器 v2。
现在,尝试一些示例查询,如下所示。有关使用 SELECT 命令的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的 SELECT。
-- Get definition for the sales table. SELECT * FROM pg_table_def WHERE tablename = 'sales';
-- Find total sales on a given calendar date. SELECT sum(qtysold) FROM sales, date WHERE sales.dateid = date.dateid AND caldate = '2008-01-05';
-- Find top 10 buyers by quantity. SELECT firstname, lastname, total_quantity FROM (SELECT buyerid, sum(qtysold) total_quantity FROM sales GROUP BY buyerid ORDER BY total_quantity desc limit 10) Q, users WHERE Q.buyerid = userid ORDER BY Q.total_quantity desc;
-- Find events in the 99.9 percentile in terms of all time gross sales. SELECT eventname, total_price FROM (SELECT eventid, total_price, ntile(1000) over(order by total_price desc) as percentile FROM (SELECT eventid, sum(pricepaid) total_price FROM sales GROUP BY eventid)) Q, event E WHERE Q.eventid = E.eventid AND percentile = 1 ORDER BY total_price desc;
步骤 6:重置环境
在前面的步骤中,您已成功创建了 Amazon Redshift 集群,将数据加载到表中,并使用 Amazon Redshift 查询编辑器 v2 等 SQL 客户端查询了数据。
完成本教程后,我们建议您请通过删除您的示例集群来将您的环境还原至先前的状态。在将 Amazon Redshift 服务删除之前,您需要继续为其付费。
但是,如果您打算执行其他 Amazon Redshift 指南中的任务或者运行命令以在数据仓库中定义和使用数据库中介绍的任务,则需要将示例集群保持在运行状态。
删除集群
-
登录 AWS Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/
。 -
在导航菜单上,选择集群以显示集群的列表。
-
选择
examplecluster
集群。对于操作,选择删除。此时将显示删除集群页面。 -
确认要删除的集群,然后选择删除集群。
在集群列表页面上,集群状态会在集群被删除时进行更新。
完成本教程后,您可以在用以了解有关 Amazon Redshift 的其他资源中详细了解 Amazon Redshift 以及后续步骤。