Amazon Redshift
入门指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

步骤 6:从 Amazon S3 中加载示例数据

此时,您拥有了一个名为 dev 的数据库,并且已连接。接下来,在该数据库中创建一些表,将数据上传到表并尝试查询。为方便起见,您上传的示例数据在 Amazon S3 存储桶中可用。

注意

如果您使用的是 SQL 客户端工具,请确保您的 SQL 客户端已连接到集群。

完成此步骤后,您可以在我从这里可以了解哪些内容?中详细了解 Amazon Redshift 并重置环境。

上传示例数据

  1. 创建表。

    分别复制并运行下列创建表语句,以在 dev 数据库中创建表。有关该语法的更多信息,请参阅 Amazon Redshift Database Developer Guide 中的 CREATE TABLE

    create table users( userid integer not null distkey sortkey, username char(8), firstname varchar(30), lastname varchar(30), city varchar(30), state char(2), email varchar(100), phone char(14), likesports boolean, liketheatre boolean, likeconcerts boolean, likejazz boolean, likeclassical boolean, likeopera boolean, likerock boolean, likevegas boolean, likebroadway boolean, likemusicals boolean); create table venue( venueid smallint not null distkey sortkey, venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer); create table category( catid smallint not null distkey sortkey, catgroup varchar(10), catname varchar(10), catdesc varchar(50)); 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')); create table event( eventid integer not null distkey, venueid smallint not null, catid smallint not null, dateid smallint not null sortkey, eventname varchar(200), starttime timestamp); create table listing( listid integer not null distkey, sellerid integer not null, eventid integer not null, dateid smallint not null sortkey, numtickets smallint not null, priceperticket decimal(8,2), totalprice decimal(8,2), listtime timestamp); 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);
  2. 使用 COPY 命令从 Amazon S3 中加载示例数据。

    注意

    我们建议使用 COPY 命令将大型数据集从 Amazon S3 或 DynamoDB 加载到 Amazon Redshift 中。有关 COPY 语法的更多信息,请参阅 Amazon Redshift Database Developer Guide 中的 COPY

    本教程的示例数据由 Amazon Redshift 所拥有的 Amazon S3 存储桶提供。存储桶权限经过配置,为所有已通过身份验证的 AWS 用户授予示例数据文件的读取访问权限。

    要加载示例数据,您必须为您的集群提供代表您访问 Amazon S3 的身份验证。您可提供基于角色的身份验证或基于密钥的身份验证。我们建议使用基于角色的身份验证。有关两种类型的身份验证的更多信息,请参阅 Amazon Redshift Database Developer Guide中的 CREDENTIALS

    在此步骤中,您将通过引用在前面步骤中创建并附加到集群的 IAM 角色来提供身份验证。

    注意

    如果您没有访问 Amazon S3 的适当权限,则在运行 COPY 命令时,会收到以下错误消息:S3ServiceException: Access Denied

    COPY 命令包含用于 IAM 角色的 Amazon 资源名称 (ARN) 的占位符,如下例所示。

    copy users from 's3://awssampledbuswest2/tickit/allusers_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region 'us-west-2';

    要使用 IAM 角色授予访问权限,请将 CREDENTIALS 参数字符串中的 <iam-role-arn> 替换为您在步骤 2:创建 IAM 角色中创建的 IAM 角色的角色 ARN。

    您的 COPY 命令类似下面的示例。

    copy users from 's3://awssampledbuswest2/tickit/allusers_pipe.txt' credentials 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole' delimiter '|' region 'us-west-2';

    要加载示例数据,请将以下 COPY 命令中的 <iam-role-arn> 替换为您的角色 ARN。然后,在您的 SQL 客户端工具中分别运行命令。

    copy users from 's3://awssampledbuswest2/tickit/allusers_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region 'us-west-2'; copy venue from 's3://awssampledbuswest2/tickit/venue_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region 'us-west-2'; copy category from 's3://awssampledbuswest2/tickit/category_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region 'us-west-2'; copy date from 's3://awssampledbuswest2/tickit/date2008_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region 'us-west-2'; copy event from 's3://awssampledbuswest2/tickit/allevents_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-west-2'; copy listing from 's3://awssampledbuswest2/tickit/listings_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region 'us-west-2'; copy sales from 's3://awssampledbuswest2/tickit/sales_tab.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region 'us-west-2';
  3. 现在,尝试进行示例查询。有关更多信息,请参阅 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;
  4. (可选)打开 Amazon Redshift 控制台,查看您运行的查询。Queries (查询) 选项卡显示您在指定的时间段内运行的查询列表。默认情况下,该控制台显示在过去 24 小时内执行的查询,其中包括当前正在执行的查询。

    1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon Redshift 控制台:https://console.amazonaws.cn/redshift/

    2. 在右侧窗格的集群列表中,选择 examplecluster

    3. 选择 Queries 选项卡。

      该控制台显示您运行的查询列表,如下例所示。

    4. 要查看有关查询的更多信息,请在 Query 列中选择查询 ID 链接或选择放大镜图标。

      以下示例显示您在上一步中运行的某个查询的详细信息。